首页 > 解决方案 > 循环思想字典元素并在相似键上组合(也添加)

问题描述

我会有多个“key1”和“key2”,我可以有 20 个或更多。

my_dict = {"key1": [{"A": 0}, {"B": 1}, {"C": 0}, {"D": 0},
                    {"A": 0}, {"B": 0}, {"C": 0}, {"D": 0},
                    {"A": 0}, {"B": 1}, {"C": 0}, {"D": 0}],
           "key2": [{"A": 0}, {"B": 0}, {"C": 0}, {"D": 0},
                    {"A": 1}, {"B": 0}, {"C": 0}, {"D": 0}, 
                    {"A": 0}, {"B": 0}, {"C": 0}, {"D": 0},
                    {"A": 1}, {"B": 0}, {"C": 0}, {"D": 0},
                    {"A": 0}, {"B": 0}, {"C": 0}, {"D": 0}],
            "key+:"..etc..}

我的最终输出如下:

new_dict = {"key1": [{"A": 0}, {"B": 2}, {"C": 0}, {"D": 0}],
            "key2": [{"A": 2}, {"B": 0}, {"C": 0}, {"D": 0}]}

我试过了:

new_dict = defaultdict(int)
f_dict = {}
for org in my_dict.keys():
    f_dict[str(org)] = []
    for key, dict_list in my_dict.items():
        for d in dict_list:
            for k, v in d.items():
                new_dict[k] += v
    f_dict[str(org)].append(dict(new_dict))

标签: python-3.xlistdictionary

解决方案


这有几个层次:

外层:具有两个唯一键的字典每个字典都包含一个较小字典
的列表(我称之为)dict_list

from collections import defaultdict

# initialize a new default dictionary
# this allows you to initialize each new key with a value of zero
new_dict = defaultdict(int)

for key, dict_list in my_dict.items():
    for d in dict_list:
        for k, v in d.items():
            new_dict[k] += v

编辑1:
我不明白这个问题。看起来您想保留外部字典的键。

from collections import defaultdict
new_dict = {}
for key, dict_list in my_dict.items():
    new_dict[key] = defaultdict(int)
    for d in dict_list:
        for k, v in d.items():
            new_dict[key][k] += v

这将以以下格式输出 new_dict:
new_dict = {'key1': {'A': 0, 'B': 2...} 'key2': {...}}

如果你希望 key1 和 key2 包含一个字典列表,在前面的代码之后,你可以添加:

for key, d in new_dict.items():
    l = []
    for k, v in d.items():
        l.append({k: v})
    new_dict[key] = l

这将以以下格式输出 new_dict:
new_dict = {'key1': [{'A': 0}, {'B': 2},...], 'key2': [{...}, ...]}


推荐阅读