我从数组数组创建一个默认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试图将我的值保存在数组中一样,因为这是源列表!
任何人都知道这里会发生什么以及我如何能达到预期的结果?
答案 0 :(得分: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)
会创建一个空列表。
答案 1 :(得分:7)
当你这样称呼时:
d = defaultdict(list)
这意味着如果您尝试访问d['someKey']
并且它不存在,则通过调用不带参数的d['someKey']
来初始化list()
。所以你最终会得到一个空列表,然后你可以将你的字典附加到。你可能想要这个:
d = defaultdict(dict)
然后这个:
for i in array:
d[i[0]].update({"num1":i[1],"num2":i[2]})