python - 如果一个字典中的键与另一字典中的键匹配,如何返回新字典?

标签 python dictionary

目前,我有一个字典,它的键代表一个邮政编码,值也是一个字典。

d = { 94111: {'a': 5,  'b': 7,  'd': 7}, 
      95413: {'a': 6,  'd': 4}, 
      84131: {'a': 5,  'b': 15, 'c': 10, 'd': 11}, 
      73173: {'a': 15, 'c': 10, 'd': 15}, 
      80132: {'b': 7,  'c': 7,  'd': 7} }

然后是第二个字典,它关联邮政编码属于哪个州。

states = {94111: "TX", 84131: "TX", 95413: "AL", 73173: "AL", 80132: "AL"}

如果字典 states 中的邮政编码与 db 中的某个键匹配,那么它将汇总这些值并将其放入新字典中,就像预期的输出一样.

预期输出:

{'TX': {'a': 10, 'b': 22, 'd': 18, 'c': 10}, 'AL': {'a': 21, 'd': 26, 'c': 17, 'b': 7}}

到目前为止,这是我正在寻找的方向,但我不确定两个键何时匹配,如何创建一个看起来像预期输出的字典。

def zips(d, states):
    result = dict()
    for key, value in db.items():
        for keys, values in states.items():
            if key == keys:


zips(d, states)

最佳答案

使用 collections 模块

例如:

from collections import defaultdict, Counter

d = { 94111: {'a': 5,  'b': 7,  'd': 7}, 
      95413: {'a': 6,  'd': 4}, 
      84131: {'a': 5,  'b': 15, 'c': 10, 'd': 11}, 
      73173: {'a': 15, 'c': 10, 'd': 15}, 
      80132: {'b': 7,  'c': 7,  'd': 7} }

states = {94111: "TX", 84131: "TX", 95413: "AL", 73173: "AL", 80132: "AL"}

result = defaultdict(Counter)
for k,v in d.items():
    if k in states:
        result[states[k]] += Counter(v)
print(result)

输出:

defaultdict(<class 'collections.Counter'>, {'AL': Counter({'d': 26, 'a': 21, 'c': 17, 'b': 7}), 
'TX': Counter({'b': 22, 'd': 18, 'a': 10, 'c': 10})})

关于python - 如果一个字典中的键与另一字典中的键匹配,如何返回新字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54459155/

相关文章:

c# - 遍历字典时出现 KeyNotFoundException

python - 我怎样才能在给定可能元素的每个可能的长度 L 数组的数组上快速运行一个函数?

python - python站点手册完全由pydoc生成吗?

将函数字典转换为结果字典所需的python技巧

json - 如何在 Go 中导航具有未知结构的嵌套 json?

ios - MapKit 始终以用户位置为中心

python - 如何在Python中对一个数字进行排序并得到另一个数字?

python - 从 Swift App 启动 Python 脚本

Python:如何将 Dataframes 字典变成一个大数据框,其中列名是前一个字典的键?

Python 3 使用 kwargs 替换嵌套字典值