2

配列の配列からデフォルトのdictを作成しています:

>>> array = [['Aaron','1','2'],['Ben','3','4']]
>>> d = defaultdict(list)
>>> for i in array: d[i[0]].append({"num1":i[1],"num2":i[2]})

私の期待される結果は次のとおりです。

>>> d
>>> defaultdict(<type 'list'>, {'Aaron': {'num1': '1', 'num2': '2'}, 
'Ben': {'num1': '3', 'num2': '4'}})

しかし、私の結果は次のとおりです。

>>> d
>>> defaultdict(<type 'list'>, {'Aaron': [{'num1': '1', 'num2': '2'}], 
'Ben': [{'num1': '3', 'num2': '4'}]})

それがソースリストであるため、defaultdictが私の値を配列に保持しようとしているかのようです!

ここで何が起こっているのか、どうすれば期待される結果を得ることができるのか知っている人はいますか?

4

2 に答える 2

14

これを呼び出すと:

d = defaultdict(list)

アクセスしようとしてd['someKey']存在しない場合は、引数なしd['someKey']で呼び出して初期化することを意味します。list()したがって、空のリストになり、辞書を追加します。おそらく代わりにこれが必要です:

d = defaultdict(dict)

そしてこれ:

for a, b, c in array: 
  d[a].update({"num1": b, "num2": c})
于 2012-03-29T15:20:39.873 に答える
8

ではなく、プレーンな辞書が必要ですdefaultdict:

d = {}
for name, num1, num2 in array:
    d[name] = {"num1": num1, "num2": num2}

または辞書の理解を使用して

d = {name: {"num1": num1, "num2": num2} for name, num1, num2 in array}

このコードの結果d

{'Aaron': {'num1': '1', 'num2': '2'}, 'Ben': {'num1': '3', 'num2': '4'}}

defaultdict(list)存在しないキーにアクセスすると、空のリストが作成されます。

于 2012-03-29T15:20:54.450 に答える