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编程中的包结构
Oct 25 Python
Python命令启动Web服务器实例详解
Feb 23 Python
python算法演练_One Rule 算法(详解)
May 17 Python
python爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
对Python3中列表乘以某一个数的示例详解
Jul 20 Python
Python Web框架之Django框架Form组件用法详解
Aug 16 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
PyTorch的torch.cat用法
Jun 28 Python
python类共享变量操作
Sep 03 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
javascript如何实现create方法
2019/11/04 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
python中列表元素连接方法join用法实例
2015/04/07 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
python+opencv实现阈值分割
2018/12/26 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
中学生在校期间的自我评价分享
2013/11/13 职场文书
临床护士自荐信
2014/01/31 职场文书
实习生求职自荐信
2014/02/07 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书