Python编程根据字典列表相同键的值进行合并

 更新时间:2021年10月03日 12:58:27   作者:曲鸟  
这篇文章主要介绍了来学习Python字典列表根据相同键的值进行合并的操作方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

一、前言

今天有粉丝咨询了一个问题,他现在有两个列表,它们的元素都为字典,且字典都有一个key为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}]

二、实现分析

这是粉丝写的实现代码:

for i in range(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字典列表键值合并的资料请关注脚本之家其它相关文章!

相关文章

  • python末尾逗号导致返回结果是一个元组的问题

    python末尾逗号导致返回结果是一个元组的问题

    在Python中,除非特别需要返回或传参元组,一般不推荐在语句末尾添加逗号,应该注意检查是否存在末尾逗号导致的这些副作用,这篇文章主要介绍了python末尾逗号导致返回结果是一个元组,需要的朋友可以参考下
    2023-09-09
  • python实现飞机大战项目

    python实现飞机大战项目

    这篇文章主要为大家详细介绍了python实现飞机大战项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Python入门之面向对象和类

    Python入门之面向对象和类

    这篇文章主要为大家介绍了Python面向对象和类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Python基本数据类型详细介绍

    Python基本数据类型详细介绍

    Python提供的基本数据类型主要有:布尔类型、整型、浮点型、字符串、列表、元组、集合、字典等等
    2014-03-03
  • Django中session登录验证操作指南

    Django中session登录验证操作指南

    本文介绍了如何使用Django中的session登录验证来保护网站的安全性。在此过程中,我们首先介绍了Django的认证架构和基本概念,然后我们深入探讨了如何使用session实现登录验证功能。最后,我们解释了如何创建一个Custom User Model,以及如何使用它来自定义用户对象。
    2023-04-04
  • 详解Python中matplotlib模块的绘图方式

    详解Python中matplotlib模块的绘图方式

    Matplotlib是Python中最受欢迎的数据可视化软件包之一,它是 Python常用的2D绘图库,同时它也提供了一部分3D绘图接口。本文将详细介绍Matplotlib的绘图方式,需要的可以参考一下
    2022-07-07
  • 深入探究Django中的Session与Cookie

    深入探究Django中的Session与Cookie

    周末小闲在家研究了下django的 cookie 和 session,所以下面这篇文章主要给大家深入地介绍了关于Django中Session与Cookie的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面跟着小编来一起看看吧。
    2017-07-07
  • Pycharm+Python+PyQt5使用详解

    Pycharm+Python+PyQt5使用详解

    这篇文章主要介绍了Pycharm+Python+PyQt5使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python实现在PyPI上发布自定义软件包的方法详解

    Python实现在PyPI上发布自定义软件包的方法详解

    在Python中我们经常使用pip来安装第三方Python软件包,其实我们每个人都可以免费地将自己写的Python包发布到PyPI上。本文我们就将详细介绍如何发布测试包,需要的可以参考一下
    2022-06-06
  • 在Django的session中使用User对象的方法

    在Django的session中使用User对象的方法

    这篇文章主要介绍了在Django的session中使用User对象的方法,Django是众Python web开发框架中人气最高的一个,需要的朋友可以参考下
    2015-07-07

最新评论