合并key值相同的字典

d1 = {'a':1,'b':2,'c':3}
d2 = {'a':4,'b':5,'c':6}
d3 = {'a':[1,4],'b':[2,5],'c':[3,6]}

如上 想用d1,d2合成为d3格式.
首先想到的是利用dict的update函数,但发现存在如下问题:

d1 = {'a':1,'b':2,'c':3}
d2 = {'a':4,'b':5,'c':6}
d3 ={}
d3.update(d1)
d3.update(d2)
print(d3)


{'a': 4, 'b': 5, 'c': 6}

并不会将相同的key的value合并在一起,只取大值

后又采用另外的方法发现结果一样

d1 = {"a": 1, "b": 2, "c": 3}
d2 = {"a": 4, "b": 5, "c": 6}
d3 = {**d1, **d2}
d4 = {**d2, **d1}



d3
Out[11]: {'a': 4, 'b': 5, 'c': 6}

d4
Out[12]: {'a': 1, 'b': 2, 'c': 3}

没办法只能转到for 循环了,发现了一个还不错的方法 setdefult()
这个方法对于字典中已经有的key , 直接 return 这个 key 对对应的值,

如果没有 key ,会加入这个key ,setdefault(key[, default]) 并且可以指定 一个默认值, 如果没有指定, 则认为是None 返回, 如果 指定了default 则直接返回 default值
如果有这个key ,直接返回字典中对应的key 的值 ,即使设置了default ,也不会返回default, 而是返回 key 对应的value 值


from collections import defaultdict
lst = [{'a': 123}, {'a': 456},{'b': 789}]

dic = {}
for _ in lst:
    for k, v in _.items():
        dic.setdefault(k, []).append(v)
        

dic
Out[17]: {'a': [123, 456], 'b': [789]}
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值