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
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')
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
>>> a = {'foo': 1, 'bar': 2}
>>> b = a.pop('foo'); a
{'bar': 2}
ç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.