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类的多重继承问题深入分析
Nov 09 Python
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
解析Python中的变量、引用、拷贝和作用域的问题
Apr 07 Python
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
代码讲解Python对Windows服务进行监控
Feb 11 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
Python登录系统界面实现详解
Jun 25 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
python 遍历pd.Series的index和value
Nov 26 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 Python
QML用PathView实现轮播图
Jun 03 Python
Python unittest生成测试报告过程解析
Sep 08 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
落伍首发 php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
php中看实例学正则表达式
2006/12/25 PHP
Discuz 模板引擎的封装类代码
2008/07/18 PHP
php下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
canvas的神奇用法
2017/02/03 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
python实现动态创建类的方法分析
2019/06/25 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
10款最好的Python开发编辑器
2019/07/03 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
中国最大的团购网站:聚划算
2016/09/21 全球购物
大学毕业生自荐书怎么写?
2014/01/06 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
暑期社会实践感言
2014/02/25 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
高三英语教学计划
2015/01/23 职场文书
医院感染管理制度
2015/08/05 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
浅析MongoDB之安全认证
2021/06/26 MongoDB
php双向队列实例讲解
2021/11/17 PHP