首页 > 解决方案 > 合并字典和计数器对象

问题描述

Bellow 是我尝试将 Dictionary 与具有默认零值的类别合并的代码,将 Counter 对象与两个或多个具有 Dictionary 类别的字典合并,但并非全部都存在于其中。结果将给出一个列表,其中包含两个或多个字典,具体取决于 Counter 对象中的字典数量。如果字典键等于第一个计数器对象字典键,则值将被替换,依此类推。

Result = []
        for data in CounterList:
            for kd, vd in Dictionary:

                for kc, vc in data.items():
                    if kd == kc:
                        Dictionary.update({key: valueIn})

                Result.append(Dictionary)
        print("Result", Result)

计数器列表:

[Counter({'A': 10, 'B': 15, 'C': 5,'E': 8}), Counter({'A': 15, 'D': 5, 'F': 20,'G': 20})]

字典:

{'A':0,'B':0,'C':0,'D':0,'E':0,'F':0,'G':0}

结果:

[{'A':10,'B':15,'C':5,'D':0,'E':8,'F':0,'G':0},{'A':15,'B':0,'C':0,'D':5,'E':0,'F':20,'G':20}]

标签: python-3.x

解决方案


您可以在计数器对象上使用循环,并对模板结果进行一些深度复制:

from collections import Counter
import copy

counts = [Counter({'A': 10, 'B': 15, 'C': 5,'E': 8}), 
          Counter({'A': 15, 'D': 5, 'F': 20,'G': 20})]

d_template = {'A':0,'B':0,'C':0,'D':0,'E':0,'F':0,'G':0} 

result = []

for c in counts:
    # deep copy your template 
    result.append(copy.deepcopy(d_template))
    # and update it to the current counter data
    result[-1].update(c)


print(result)

输出:

[{'A': 10, 'B': 15, 'C': 5, 'D': 0, 'E': 8, 'F': 0,  'G': 0}, 
 {'A': 15, 'B': 0,  'C': 0, 'D': 5, 'E': 0, 'F': 20, 'G': 20}]

推荐阅读