Je souhaite créer un dictionnaire python qui me renvoie la valeur clé pour les clés manquantes dans le dictionnaire.
Exemple d'utilisation :
dic = smart_dict()
dic['a'] = 'one a'
print(dic['a'])
# >>> one a
print(dic['b'])
# >>> b
Je souhaite créer un dictionnaire python qui me renvoie la valeur clé pour les clés manquantes dans le dictionnaire.
Exemple d'utilisation :
dic = smart_dict()
dic['a'] = 'one a'
print(dic['a'])
# >>> one a
print(dic['b'])
# >>> b
dict
ont un __missing__
pour cela :
class smart_dict(dict):
def __missing__(self, key):
return key
Pourquoi n'utilisez-vous pas simplement
dic.get('b', 'b')
Bien sûr, vous pouvez sous-classer dict
comme d'autres le soulignent, mais je trouve pratique de me rappeler de temps en temps que get
peut avoir une valeur par défaut !
Si vous voulez defaultdict
, essayez ceci :
dic = defaultdict()
dic.__missing__ = lambda key: key
dic['b'] # should set dic['b'] to 'b' and return 'b'
sauf... eh bien : AttributeError: ^collections.defaultdict^object attribute '__missing__' is read-only
, vous devrez donc sous-classer :
from collections import defaultdict
class KeyDict(defaultdict):
def __missing__(self, key):
return key
d = KeyDict()
print d['b'] #prints 'b'
print d.keys() #prints []
Le premier répondant a mentionné defaultdict
,
mais vous pouvez définir __missing__
pour n'importe quelle sous-classe de dict
:
>>> class Dict(dict):
def __missing__(self, key):
return key
>>> d = Dict(a=1, b=2)
>>> d['a']
1
>>> d['z']
'z'
De plus, j'aime l'approche du deuxième répondant :
>>> d = dict(a=1, b=2)
>>> d.get('z', 'z')
'z'
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.