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继承问题
May 29 Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 Python
Python中异常重试的解决方案详解
May 05 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
Python中turtle作图示例
Nov 15 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
多个python文件调用logging模块报错误
Feb 12 Python
Python ATM功能实现代码实例
Mar 19 Python
python eventlet绿化和patch原理
Nov 21 Python
OpenCV+Python3.5 简易手势识别的实现
Dec 21 Python
python之随机数函数的实现示例
Dec 30 Python
Python爬虫实现selenium处理iframe作用域问题
Jan 27 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 批量删除数据的方法分析
2009/10/30 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
php中session与cookie的比较
2015/01/27 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
vue.js的提示组件
2017/03/02 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
python输出决策树图形的例子
2019/08/09 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
Python进行特征提取的示例代码
2020/10/15 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
Python 内存管理机制全面分析
2021/01/16 Python
初中英语演讲稿
2014/04/29 职场文书
应届生求职信
2014/05/31 职场文书
法人委托书范本
2014/09/15 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android