从For循环创建嵌套字典

时间:2018-03-30 11:15:36

标签: python python-3.x dictionary

我正在尝试从现有数据创建新词典。我不确定最好的解释方法,所以这里有一个例子:

我有以下数据:

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'}}}

有一种简单的方法吗?

1 个答案:

答案 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'}]})