python字典合并输入用字符_Python 两个字典(dic)中相同key合并(value分别作合成后字典key和value)...

本文介绍了两种在Python中合并字典的方法,特别是在有相同key的情况下进行合并,并给出实例代码。第一种方法利用collections模块的defaultdict和Counter,第二种方法采用字典推导和for循环。示例中展示了如何根据特定条件将多个字典合并到新的字典结构中。
摘要由CSDN通过智能技术生成

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(, {'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}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值