Python 两个字典(dic)中相同key合并(value分别作合成后字典key和value)

本文介绍了如何使用Python的collections模块的defaultdict和Counter类,以及字典推导和for循环来合并具有相同key的字典。通过示例代码展示了如何根据key关联字典,并将value合并成新的字典结构。文章强调了技术交流的目的,并提醒读者不要用于非法用途。
摘要由CSDN通过智能技术生成

简介:
本文主要介绍Python合并两个拥有相同key的字典,根据字典的key做关联,两个字典的value分别做合成后的字典的key和value,示例代码如下:

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

合成后的字典:

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

1、使用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})})

2、使用字典推导和for循环实现

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"}                         
out = {i: 0 for i in states.values()}                                                              
for key, value in d.items():                                                                       
    if key in states:                                                                              
        if not out[states[key]]:                                                                   
            out[states[key]] = value                                                               
        else:                                                                                      
            for k, v in value.items():                                                             
                if k in out[states[key]]:                                                          
                    out[states[key]][k] += v                                                       
                else:                                                                              
                    out[states[key]][k] = v                                                        
# out -> {'TX': {'a': 10, 'b': 22, 'd': 18, 'c': 10}, 'AL': {'a': 21, 'd': 26, 'c': 17, 'b': 7}}

了解更多分析及数据抓取可查看:
http://data.yisurvey.com:8989/
特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值