【发布时间】:2020-03-15 08:23:26
【问题描述】:
问题
根据this answer,在Python 3.5或更高版本中,可以通过解包合并两个字典x和y:
z = {**x, **y}
是否可以解压一个可变的字典列表?类似的东西
def merge(*dicts):
return {***dicts} # this fails, of course. What should I use here?
例如,我希望
list_of_dicts = [{'a': 1, 'b': 2}, {'c': 3}, {'d': 4}]
{***list_of_dicts} == {'a': 1, 'b': 2, 'c': 3, 'd': 4}
请注意,这个问题不是关于如何合并字典列表,因为上面的链接提供了答案。这里的问题是:是否有可能以及如何解压字典列表?
编辑
正如 cmets 中所述,这个问题与this one 非常相似。但是,解压缩字典列表不同于简单地合并它们。假设有一个运算符*** 旨在解包字典列表,并给出
def print_values(a, b, c, d):
print('a =', a)
print('b =', b)
print('c =', c)
print('d =', d)
list_of_dicts = [{'a': 1, 'b': 2}, {'c': 3}, {'d': 4}]
可以写
print_values(***list_of_dicts)
而不是
print_values(**merge(list_of_dicts))
【问题讨论】:
-
不,没有使用语法糖的本地方法。
-
@TheIncorrigible1,我认为您的评论是对这个问题的最准确答案。谢谢。
-
相关,甚至可能是重复的,因为这个问题的答案只是“否”:How do I merge a list of dicts into a single dict?
-
@Georgy,感谢您指出这一点。事实上,
{k: v for d in L for k, v in d.items()}的解决方案看起来非常好。但是,我不确定这是否是重复的,因为我正在寻找用于解压缩字典列表的语法糖,而该问题涉及合并。 -
@Georgy,我编辑了这个问题,旨在展示除合并之外的另一个解包应用程序。希望它能阐明我的问题与您分享的问题之间的区别。
标签: python python-3.x dictionary merge