0

空のリストの辞書を初期化しています。次よりも効率的な辞書の初期化方法はありますか?

dictLists = {}
dictLists['xcg'] = []
dictLists['bsd'] = []
dictLists['ghf'] = []
dictLists['cda'] = []
...

毎回dictListsを書く必要がない方法はありますか、それともこれは避けられませんか?

4

5 に答える 5

8

collections.defaultdictを使用すると、欠落しているキーに特定の値を返すファクトリメソッドを設定できます。

a = collections.defaultdict(list)

編集:

これが私の鍵です

b = ['a', 'b','c','d','e']

これが「事前定義されたキー」を使用している私です

for key in b:
    a[key].append(33) 
于 2012-06-01T14:42:19.593 に答える
7

キーが事前にわかっている場合は、次のことができます

dictLists = dict((key, []) for key in ["xcg", "bsd", ...])

または、Python >=2.7 の場合:

dictLists = {key: [] for key in ["xcg", "bsd", ...]}
于 2012-06-01T14:43:51.570 に答える
4

静的キーを追加する場合は、それらをdictコンストラクターに直接配置してみませんか?

dictLists = dict(xcg=[], bsd=[], ghf=[])

または、キーが常に有効なPython識別子でもない場合:

dictLists = {'xcg': [], 'bsd': [], 'ghf': []}

一方、キーが静的でないか、シーケンスに簡単に保存できない場合は、キーがたくさんあると、キーをループする方が効率的です。次の例でもkeys変数を入力しているため、これは上記のメソッドよりも効率的ではありませんがkeys、何らかの方法で生成された場合は、より効率的になる可能性があります。

keys = ['xcg', 'bsd', 'ghf', …]
dictLists = {key: [] for key in keys}
于 2012-06-01T14:42:07.733 に答える
2

追加するキーのforループを使用することもできます。

for i in ("xcg", "bsd", "ghf", "cda"):
    dictList[i] = []
于 2012-06-01T14:42:51.213 に答える
1

辞書内包表記をサポートする Python のバージョン (Python 2.7+):

dictLists = {listKey: list() for listKey in listKeys}
于 2012-06-01T14:44:11.767 に答える