说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在以下列表,每个元素是一个字典,需求为将这些字典合并成一个独立的字典类型数据。
lst = [{'a': 1, 'b': 2}, {'b': 3, 'c': 4}, {'d': 5}]
接下来我们用几种方法进行分析,完成这个需求。
首先可定义一个空字典,然后迭代列表往这个空字典更新字典内容:
lst = [{'a': 1, 'b': 2}, {'b': 3, 'c': 4}, {'d': 5}]
dic = {}
for i in lst:
dic.update(i)
dic
# {'a': 1, 'b': 3, 'c': 4, 'd': 5}
还可以用 |
符号来做合并操作,这个方法在 Python 3.9+ 中才可用:
for i in lst:
dic = dic | i
可以简写成:
for i in lst:
dic |= i
Python 的 collections 内置模块提供的 ChainMap 的主要功能是将多个字典或者其他其他映射(mappings)类型数据组合在一起,形成一个单一的可更新的视图。
from collections import ChainMap
dict(ChainMap(*lst))
# {'d': 5, 'b': 2, 'c': 4, 'a': 1}
需要注意的是它合并处理的顺序与第一种方法不同。如果要保持一致,可以对列表进行反转:
from collections import ChainMap
dict(ChainMap(*lst[::-1]))
# {'a': 1, 'b': 3, 'c': 4, 'd': 5}
reduce 可以使用一个两个参数的函数,此函数将前两个参数得到的结果与下一个参数进行处理,循环往复,直到处理完所有数据。代码如:
from functools import reduce
reduce(lambda a, b: dict(a, **b), lst)
# {'a': 1, 'b': 3, 'c': 4, 'd': 5}
(完)
更新时间:2021-11-09 23:59:54 标签:python 字典 合并