目录
一、前言
今天有粉丝咨询了一个问题,他现在有两个列表,它们的元素都为字典,且字典都有一个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基础之字典
- Python四大金刚之字典详解
- Python数学建模PuLP库线性规划进阶基于字典详解
- Python字典和集合讲解
- Python 字典详解
- Python教程通过公共键对不同字典进行排序示例详解
- Python中关于字典的常规操作范例以及介绍
- Python中的字典到底是有序的吗
- Python字典的基础操作
声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)