我确定我正在做一些愚蠢的事情,但我正在尝试获取字典列表并创建一个字典,其中字典中的一个键:值对成为键,其余键:值对成为值的一部分,其中值是字典列表。这里有一个例子:
In [115]: aa = ['a', 'b', 'c', 'd']
In [116]: my_dict = dict.fromkeys(key_list, [])
In [143]: my_dict
Out[143]: {'a': [], 'b': [], 'c': [], 'd': []}
In [117]: list_of_dicts = [{'letter':'a', 'val1':2, 'val2':3}, {'letter':'b', 'val1':4, 'val2':5}, {'letter':'c', 'val1':6, 'val2':7}]
In [118]: %paste
for entry in list_of_dicts:
remainder = {k:v for k, v in entry.iteritems() if k!='letter'}
my_dict[entry['letter']].append(remainder)
## -- End pasted text --
In [119]: my_dict
Out[119]:
{'a': [{'val1': 2, 'val2': 3}, {'val1': 4, 'val2': 5}, {'val1': 6, 'val2': 7}],
'b': [{'val1': 2, 'val2': 3}, {'val1': 4, 'val2': 5}, {'val1': 6, 'val2': 7}],
'c': [{'val1': 2, 'val2': 3}, {'val1': 4, 'val2': 5}, {'val1': 6, 'val2': 7}],
'd': [{'val1': 2, 'val2': 3}, {'val1': 4, 'val2': 5}, {'val1': 6, 'val2': 7}]}
为什么我的值会应用于字典中的每个条目?
为什么不是'最后的字典:
In [121]: final_dict
Out[121]:
{'a': [{'val1': 2, 'val2': 3}],
'b': [{'val1': 4, 'val2': 5}],
'c': [{'val1': 6, 'val2': 7}]}
答案 0 :(得分:3)
my_dict = dict.fromkeys(key_list, [])
对所有密钥使用相同的列表
您可以使用
my_dict = {k: [] for k in key_list}
获取每个密钥的新列表
或者,您可以使用collections.defaultdict
my_dict = defaultdict(list)
每次插入新密钥时都会调用list()
创建新列表