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实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
Python3实现带附件的定时发送邮件功能
Dec 22 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 Python
Python基础之元组与文件知识总结
May 19 Python
详解Golang如何实现支持随机删除元素的堆
Sep 23 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
构建简单的Webmail系统
2006/10/09 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
PHP在线书签系统分享
2016/01/04 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
JavaScript 继承详解(四)
2009/07/13 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
对python中list的五种查找方法说明
2020/07/13 Python
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
类的核心特性有哪些
2014/01/01 面试题
初一体育教学反思
2014/01/29 职场文书
就业自我评价
2014/02/04 职场文书
捐款倡议书
2014/04/14 职场文书
政府信息公开实施方案
2014/05/09 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
Python中使用ipython的详细教程
2021/06/22 Python