2017-01-16 5 views
0

値がリストである辞書を作成したいと思います。今度は新しい着信キーがあれば、新しいリストを開始したいと思います。 辞書キー値に追加しようとすると、値がまだリストに宣言されていないため、エラーが表示されますが、キーがいくつあるかわからないため、最初はこれを行うことができません。例えば (以前に知られていない何か、MyDictkeyListための変数であることに注意してください)Python:リストとしての辞書の価値 - 開始

keyList = [['a',1,2],['b',3,4]] 
MyDict={} 
for key in keyList: 
    MyDict[key[0]].append(key[1:]) 

私が作成することです:

MyDict={'a': [[1, 2]], 'b': [[3, 4]]} 

はこれを行う方法はありますか?

+0

うんあります。これまでに何か試しましたか? –

+0

use defaultdict、 'MyDict = defaultdict(list)' – dnit13

答えて

1

setdefaultを使用できます。

代わりのMyDict[key[0]].append(key[1:])

あなたが値を追加しようとしているときに、リストは、それがデフォルトのリストを作成し、それに

+0

ありがとうございました。 – akipro

1

を値を追加します存在しない場合は、だから、MyDict.setdefault(key[0],[]).append(key[1:])

を使用してみてください必要なのはdefaultdictです。この目的のために正確にPythonで提供されています:

keyList = [['a',1,2],['b',3,4]] 
MyDict=defaultdict(list) 
for key in keyList: 
    MyDict[key[0]].append(key[1:]) 

print(MyDict) 

出力

defaultdict(<class 'list'>, {'b': [[3, 4]], 'a': [[1, 2]]}) 

defaultdictは、コンストラクタでデフォルトの要素を作成するために、引数なしで呼び出される関数を取得します。引数なしのlistは、空のリストを作成します。

defaultdictは、他のすべての方法で通常の辞書のように動作します。 dictを使用して、それを変換し、その後、それにもかかわらず、最終的にはあなたが簡単な辞書が欲しい、もし:

print(dict(MyDict)) 

{'b': [[3, 4]], 'a': [[1, 2]]} 
0

使用collections.defaultdictを与えます。例:

from collections import defaultdict 
d = defaultdict(lambda: []) 
d['key'].append('value to be add in list') 

追記:Defaultdictはあなたもこの方法であなたの辞書を作成することができることを意味し、呼び出し可能な引数を取る:

defaultdict(list) 
関連する問題