web-dev-qa-db-fra.com

Supprimer la clé du dictionnaire en Python renvoyant un nouveau dictionnaire

J'ai un dictionnaire

d = {'a':1, 'b':2, 'c':3}

Je dois retirer une clé, dire c et renvoyer le dictionnaire sans cette clé dans un seul appel de fonction

{'a':1, 'b':2}

d.pop ('c') retournera la valeur de clé - 3 - à la place du dictionnaire.

Je vais avoir besoin d'une solution fonctionnelle si elle existe, car cela ira dans les compréhensions

18
Xeos

Que dis-tu de ça:

{i:d[i] for i in d if i!='c'}

Il s'appelle Dictionary Comprehensions et est disponible depuis Python 2.7.

ou si vous utilisez Python plus ancien que 2.7:

dict((i,d[i]) for i in d if i!='c')
25
jh314

Pourquoi ne pas rouler le vôtre? Cela sera probablement plus rapide que d'en créer un nouveau à l'aide de la compréhension du dictionnaire:

def without(d, key):
    new_d = d.copy()
    new_d.pop(key)
    return new_d
8
Gustav Larsson
>>> a = {'foo': 1, 'bar': 2}
>>> b = a.pop('foo'); a
{'bar': 2}
1
Felix Yuan

ça va marcher,

(lambda dict_,key_:dict_.pop(key_,True) and dict_)({1:1},1)

EDIT cela supprimera la clé s'il existe dans le dictionnaire et retournera le dictionnaire sans la clé, paire de valeurs

en python, des fonctions modifient un objet à la place et renvoient une valeur à la place de l'objet modifié. La fonction {} .pop en est un exemple.

nous pouvons utiliser une fonction lambda comme dans l'exemple, ou plus générique ci-dessous (lambda func: obj: (func (obj) et False) ou obj) pour modifier ce comportement et obtenir le comportement attendu.

0
sinaiy