回答:
dict.fromkeys([1, 2, 3, 4])
これは実際にはクラスメソッドであるため、dictサブクラス(などcollections.defaultdict
)でも機能します。オプションの2番目の引数は、キーに使用する値を指定します(デフォルトはNone
)。
{k:[] for k in [1, 2, 3]}
でも初期化は安全です。
辞書を理解するための解決策を誰も気にしませんか?
>>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}
False
)を割り当てることもできます。
dict.fromkeys(keys, None)
dict.fromkeys(keys, [])
>>> keyDict = {"a","b","c","d"}
>>> dict([(key, []) for key in keyDict])
出力:
{'a': [], 'c': [], 'b': [], 'd': []}
keyDict
コードの最初の行がset
でなくを返すため、名前は誤解を招く可能性がありますdict
。
d = {}
for i in keys:
d[i] = None
TypeError: 'type' object is not iterable
ですか?
list
タイプですので。のようなものがない限りlist = []
、上記の方法では常に同じエラーが発生します
では、多くのあなたは、任意のキーのデフォルト/初期値を添付したいワークフロー、あなたはしていない必要がある個別に事前に各キーをハッシュします。使用できますcollections.defaultdict
。例えば:
from collections import defaultdict
d = defaultdict(lambda: None)
print(d[1]) # None
print(d[2]) # None
print(d[3]) # None
これはより効率的で、インスタンス化時にすべてのキーをハッシュする必要がなくなります。さらに、defaultdict
はのサブクラスなdict
ので、通常の辞書に戻す必要は通常ありません。
許可されたキーの制御を必要とするワークフローではdict.fromkeys
、受け入れられた回答に従って使用できます。
d = dict.fromkeys([1, 2, 3, 4])
dict.fromkeys([1, 2, 3], [])
、すべてのキーが同じリストにマッピングされ、1つを変更するとすべてが変更されます。