我正在尝试从现有数据创建新词典。我不确定最好的解释方法,所以这里有一个例子:
我有以下数据:
list_1 = ['aa', 'bb', 'cc']
dict_1 = {'key_1': {1: 'data1', 2: 'aa'},
'key_2': {1: 'data2', 2: 'aa'},
'key_3': {1: 'data3', 2: 'cc'},
'key_4': {1: 'data4', 2: 'bb'},
'key_5': {1: 'data5', 2: 'bb'},
'key_6': {1: 'data6', 2: 'cc'}}
我想循环遍历list_1和dict_1,如果list_1中的项与dict_1中的第二个键值对匹配,则会将其添加到新的dict中。
所以输出结果如下:
{'aa': {{1: 'data1', 2: 'aa'},
{1: 'data2', 2: 'aa'}},
'bb': {{1: 'data4', 2: 'bb'},
{1: 'data5', 2: 'bb'}},
'cc': {{1: 'data3', 2: 'cc'},
{1: 'data6', 2: 'cc'}}}
有一种简单的方法吗?
答案 0 :(得分:2)
请使用collections.defaultdict
。
注意您所需的输出包括多组词典。我假设你想要词典列表。
使用list_1
时,
from collections import defaultdict
dict_1 = {'key_1': {1: 'data1', 2: 'aa'},
'key_2': {1: 'data2', 2: 'aa'},
'key_3': {1: 'data3', 2: 'cc'},
'key_4': {1: 'data4', 2: 'bb'},
'key_5': {1: 'data5', 2: 'bb'},
'key_6': {1: 'data6', 2: 'cc'}}
d = defaultdict(list)
for k, v in dict_1.items():
d[v[2]].append(v)
结果:
defaultdict(list,
{'aa': [{1: 'data1', 2: 'aa'}, {1: 'data2', 2: 'aa'}],
'bb': [{1: 'data4', 2: 'bb'}, {1: 'data5', 2: 'bb'}],
'cc': [{1: 'data3', 2: 'cc'}, {1: 'data6', 2: 'cc'}]})