python-3.x - 合并字典和计数器对象
问题描述
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}]
解决方案
您可以在计数器对象上使用循环,并对模板结果进行一些深度复制:
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}]
推荐阅读
- php - 为什么浏览器中不显示标题信息
- c++ - C ++:在主函数与全局范围中使用指令语句
- java - 有没有办法在 build.gradle 之外定义任务类?
- java - 当char是空格时如何比较而不得到负值
- probability - 消息传递算法:失调,收敛性研究,用于不精确的 MPA
- docassemble - 如何在 docassemble / 最佳实践中组织游乐场?
- amazon-web-services - 检索 AWS S3 请求指标时收到的空数据点
- angular - Angular 反应式文件选择器需要验证和取消事件
- python - 按 MultiIndex 数据框中每个组的值排序
- selenium - 在前一个范围报告的末尾打印类方法信息之前