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


Posted in Python onOctober 05, 2021

一、前言

今天有粉丝咨询了一个问题,他现在有两个列表,它们的元素都为字典,且字典都有一个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 相关文章推荐
深入理解Python3中的http.client模块
Mar 29 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
Aug 25 Python
Python3中bytes类型转换为str类型
Sep 27 Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
python集合的创建、添加及删除操作示例
Oct 08 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
如何利用python读取micaps文件详解
Oct 18 Python
java关于string最常出现的面试题整理
Jan 18 Python
解决pytorch 保存模型遇到的问题
Mar 03 Python
python requests模块的使用示例
Apr 07 Python
python编程简单几行代码实现视频转换Gif示例
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 #Python
使用pipenv管理python虚拟环境的全过程
Sep 25 #Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 #Python
Python天气语音播报小助手
用python基于appium模块开发一个自动收取能量的小助手
Python实现打乒乓小游戏
You might like
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
php权重计算方法代码分享
2014/01/09 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
微信小程序 MD5的方法详解及实例代码
2017/03/10 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
Python测试人员需要掌握的知识
2018/02/08 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
带你学习Python如何实现回归树模型
2020/07/16 Python
浅析python实现动态规划背包问题
2020/12/31 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
保安公司服务承诺书
2014/05/28 职场文书
励志演讲稿300字
2014/08/21 职场文书
给病人的慰问信
2015/03/23 职场文书
2015国庆66周年宣传语
2015/07/14 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
nginx容器方式反向代理实战
2022/04/18 Servers