私はPythonのようなコードを持っています:
if key in dict:
dict[key].append(some_value)
else:
dict[key] = [some_value]
しかし、私はこの 'if'ステートメントを回避するいくつかの方法があるはずだと思います。私は試した
dict.setdefault(key, [])
dict[key].append(some_value)
そして
dict[key] = dict.get(key, []).append(some_value)
しかし、どちらも「TypeError:unhashable type: 'list'」について文句を言っています。何かお勧めですか?ありがとう!
最良の方法は、list
デフォルトで _collections.defaultdict
_ を使用することです。
_from collections import defaultdict
dct = defaultdict(list)
_
次に、単に使用してください:
_dct[key].append(some_value)
_
キーがまだマッピングにない場合、辞書は新しいリストを作成します。 _collections.defaultdict
_はdict
のサブクラスであり、それ以外は通常のdict
オブジェクトと同じように動作します。
標準のdict
を使用する場合、dict.setdefault()
は_dct[key]
_をデフォルトに正しく設定するため、バージョンは正常に機能するはずです。その呼び出しは.append()
でチェーンできます:
_>>> dct = {}
>>> dct.setdefault('foo', []).append('bar') # returns None!
>>> dct
{'foo': ['bar']}
_
ただし、dct[key] = dct.get(...).append()
を使用すると、_dct[key]
_の値を.append()
の出力(None
。