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常规方法实现数组的全排列
Mar 17 Python
详解Python的Django框架中manage命令的使用与扩展
Apr 11 Python
使用Python写一个小游戏
Apr 02 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
实例讲解Python爬取网页数据
Jul 08 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
Pandas 按索引合并数据集的方法
Nov 15 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
python 实现多线程下载视频的代码
Nov 15 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
Python还能这么玩之用Python做个小游戏的外挂
Jun 04 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
Zend公司全球首推PHP认证
2006/10/09 PHP
Smarty安装配置方法
2008/04/10 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
2012/05/05 PHP
PHP在线书签系统分享
2016/01/04 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
python实现自动解数独小程序
2019/01/21 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
资产评估专业大学生求职信
2013/09/29 职场文书
七一建党日演讲稿
2014/09/05 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
义诊活动通知
2015/04/24 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
Win2008系统搭建DHCP服务器
2022/06/25 Servers