0


Python列表元素为字典时,如何根据其中某个相同的键值进行元素合并

一、前言

最近有粉丝咨询了一个问题,他现在有两个列表,它们里面的元素都为字典,而且字典都有一个键名称为

id

,现在想把这两个字典中相同

id

的字典元素合并为一个字典,类似下面的效果:

两个列表的数据:

a_list =[{'id':1,'value':11},{'id':2,'value':22},{'id':3,'value':33}]
b_list =[{'id':1,'name':'a'},{'id':2,'name':'b'},{'id':3,'name':'c'}]

期望合并的结果

[{'id':1,'name':'a','value':11},{'id':2,'name':'b','value':22},{'id':3,'name':'c','value':33}]

(PS:个人在用的人工智能学习网站推荐给需要的小伙伴:captainai )


二、具体实现分析

这是粉丝写的实现代码:

for i inrange(len(b_list)):for a in a_list:if b_list[i]['id']== a['id']:
            b_list[i]['value']= a['value']print(b_list)

通过两个for循环来将

a_list

中元素字典

id

值等于

b_list

元素字段

id

值的值加入到对应的

b_list

元素字典中。

实际上两行代码就可以解决这个问题:

1.我们可以先通过推导式将

a_list

重新组装为

{id:value}

的形式

a_values ={a['id']: a['value']for a in a_list}

a_values的值为:

{1:11,2:22,3:33}

2.然后再通过推导式和字典解构再合并的方式将值与

b_list

重新组装:

res_list =[{**b,**{'value': a_values[b['id']]}}for b in b_list]

组装后的列表值为:

res_list的值为: 
[{'id':1,'name':'a','value':11},{'id':2,'name':'b','value':22},{'id':3,'name':'c','value':33}]

完整示例代码:

a_list =[{'id':1,'value':11},{'id':2,'value':22},{'id':3,'value':33}]
b_list =[{'id':1,'name':'a'},{'id':2,'name':'b'},{'id':3,'name':'c'}]
a_values ={a['id']: a['value']for a in a_list}
res_list =[{**b,**{'value': a_values[b['id']]}}for b in b_list]print('res_list的值为:', res_list)

当然一行代码也可以搞定,直接把两个推导式合并“”

res_list =[{**b,**{'value':{a['id']: a['value']for a in a_list}[b['id']]}}for b in b_list]

但这就是为了装X而写代码了,毫无必要!


三、总结

上述代码使用了推导式和

**

解构字典来合并这两个知识点,他们都是非常常用的技巧,小伙伴们可以花时间去学习一下,能够让代码变得更加简洁。


👇🏻欢迎关注公众号【曲鸟讲测试开发】,获取最新教程,面试经验、Python知识分享👇🏻

标签: python 字典

本文转载自: https://blog.csdn.net/momoda118/article/details/120787255
版权归原作者 曲鸟 所有, 如有侵权,请联系我们删除。

“Python列表元素为字典时,如何根据其中某个相同的键值进行元素合并”的评论:

还没有评论