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 相关文章推荐
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
python开发利器之ulipad的使用实践
Mar 16 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
python在线编译器的简单原理及简单实现代码
Feb 02 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
django admin后台添加导出excel功能示例代码
May 15 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
django下创建多个app并设置urls方法
Aug 02 Python
Flask response响应的具体使用
Jul 15 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 array的学习笔记
2012/05/10 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
PHP创建自己的Composer包方法
2018/04/09 PHP
PDO::inTransaction讲解
2019/01/28 PHP
删除select中所有option选项jquery代码
2013/08/12 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
react redux入门示例
2018/04/19 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
介绍Python中内置的itertools模块
2015/04/29 Python
python自定义解析简单xml格式文件的方法
2015/05/11 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
python+django快速实现文件上传
2016/10/24 Python
python IDLE 背景以及字体大小的修改方法
2019/07/12 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
歌颂党的演讲稿
2014/09/10 职场文书
个人剖析材料范文
2014/09/30 职场文书
幼儿园开学通知
2015/04/24 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python