空の辞書があります。名前:dict_x
値がリストであるキーを持つことです。
別の反復から、キー(例:key_123
)と項目(タプル)を取得して、dict_x
の値key_123
のリストに配置します。
このキーが既に存在する場合、この項目を追加します。このキーが存在しない場合は、空のリストでキーを作成してから追加するか、タプルを使用してキーを作成します。
将来、このキーが再び表示されるとき、存在するため、値を再度追加する必要があります。
私のコードはこれで構成されています:
キーと値を取得します。
dict_x
にNOTキーが存在するかどうかを確認します。そして、それを作成しない場合:
dict_x[key] == []
その後:
dict_x[key].append(value)
これはそれを行う方法ですか? try/except
ブロックを使用しようとしますか?
dict.setdefault()
を使用します。
dic.setdefault(key,[]).append(value)
help(dict.setdefault):
setdefault(...)
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
これを行うためのさまざまな方法がありますので、見た目を比較して好きなものを選択できます。私は最も "Pythonic"と思う方法でそれらを注文し、一見して明らかではないかもしれない長所と短所をコメントしました。
collections.defaultdict
:を使用
import collections
dict_x = collections.defaultdict(list)
...
dict_x[key].append(value)
長所:おそらく最高のパフォーマンス。短所:Python 2.4.xでは使用できません。
dict().setdefault()
:を使用
dict_x = {}
...
dict_x.setdefault(key, []).append(value)
短所:未使用のlist()
sの非効率的な作成。
try ... except
:を使用
dict_x = {}
...
try:
values = dict_x[key]
except KeyError:
values = dict_x[key] = []
values.append(value)
または:
try:
dict_x[key].append(value)
except KeyError:
dict_x[key] = [value]
これには defaultdict を使用できます。
from collections import defaultdict
d = defaultdict(list)
d['key'].append('mykey')
これは、setdefault
よりもわずかに効率的です。これは、使用しない新しいリストを作成しないためです。 setdefault
を呼び出すたびに、アイテムが辞書に既に存在する場合でも、新しいリストが作成されます。
collections
で defaultdict を使用できます。
Docからの例:
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)