J'ai Python code qui ressemble à:
if key in dict:
dict[key].append(some_value)
else:
dict[key] = [some_value]
mais je pense qu'il devrait y avoir une méthode pour contourner cette déclaration "si". j'ai essayé
dict.setdefault(key, [])
dict[key].append(some_value)
et
dict[key] = dict.get(key, []).append(some_value)
mais les deux se plaignent de "TypeError: type non partageable: 'liste'". Des recommandations? Merci!
La meilleure méthode consiste à utiliser collections.defaultdict
avec un list
par défaut:
from collections import defaultdict
dct = defaultdict(list)
Ensuite, utilisez simplement:
dct[key].append(some_value)
et le dictionnaire créera une nouvelle liste pour vous si la clé n'est pas encore dans le mappage. collections.defaultdict
Est une sous-classe de dict
et se comporte autrement comme un objet dict
normal.
Lorsque vous utilisez un dict
, dict.setdefault()
définit correctement dct[key]
Pour vous par défaut, de sorte que la version aurait dû fonctionner correctement. Vous pouvez enchaîner cet appel avec .append()
:
>>> dct = {}
>>> dct.setdefault('foo', []).append('bar') # returns None!
>>> dct
{'foo': ['bar']}
Cependant, en utilisant dct[key] = dct.get(...).append()
vous remplacez la valeur de dct[key]
Par la sortie de .append()
, qui est None
.