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 深入理解yield
Sep 06 Python
python模块之re正则表达式详解
Feb 03 Python
python实现解数独程序代码
Apr 12 Python
Python中异常重试的解决方案详解
May 05 Python
Python列表和元组的定义与使用操作示例
Jul 26 Python
TensorFlow实现卷积神经网络CNN
Mar 09 Python
python获取代码运行时间的实例代码
Jun 11 Python
python 反向输出字符串的方法
Jul 16 Python
对Django中内置的User模型实例详解
Aug 16 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
详解用 python-docx 创建浮动图片
Jan 24 Python
如何用python反转图片,视频
Apr 24 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输出表格的实现代码(修正版)
2010/12/29 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
php session劫持和防范的方法
2013/11/12 PHP
php中call_user_func函数使用注意事项
2014/11/21 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
javascript 函数式编程
2007/08/16 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
javascript中传统事件与现代事件
2015/06/23 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
Python实现程序的单一实例用法分析
2015/06/03 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
python操作kafka实践的示例代码
2019/06/19 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
python实现mean-shift聚类算法
2020/06/10 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
python如何写个俄罗斯方块
2020/11/06 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
企业管理部经理岗位职责
2013/12/24 职场文书
连锁超市项目计划书
2014/09/15 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android