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中的fileinput模块的简单实用示例
Jul 09 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
python实现八大排序算法(1)
Sep 14 Python
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
Python版名片管理系统
Nov 30 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
Python爬虫实现验证码登录代码实例
May 10 Python
python实现文件的备份流程详解
Jun 18 Python
Python pip安装第三方库实现过程解析
Jul 09 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 Python
Python 随机按键模拟2小时
Dec 30 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结合表单实现一些简单功能的例子
2011/06/04 PHP
php include类文件超时问题处理
2015/02/06 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Python之时间和日期使用小结
2019/02/14 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
学校安全检查制度
2014/01/27 职场文书
气象学专业个人求职信
2014/03/15 职场文书
2014年工程师工作总结
2014/11/25 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js
python APScheduler执行定时任务介绍
2022/04/19 Python