python解包字典_在Python中解压缩字典列表

Question

According to this answer, in Python 3.5 or greater, it is possible to merge two dictionaries x and y by unpacking them:

z = {**x, **y}

Is it possible to unpack a variadic list of dictionaries? Something like

def merge(*dicts):

return {***dicts} # this fails, of course. What should I use here?

For instance, I would expect that

list_of_dicts = [{'a': 1, 'b': 2}, {'c': 3}, {'d': 4}]

{***list_of_dicts} == {'a': 1, 'b': 2, 'c': 3, 'd': 4}

Note that this question is not about how to merge lists of dictionaries since the link above provides an answer to this. The question here is: is it possible, and how, to unpack lists of dictionaries?

Edit

As stated in the comments, this question is very similar to this one. However, unpacking a list of dictionaries is different from simply merging them. Supposing that there was an operator *** designed to unpack lists of dictionaries, and given

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}]

it would be possible to write

print_values(***list_of_dicts)

instead of

print_values(**merge(list_of_dicts))

解决方案

Another solution is using collections.ChainMap

from collections import ChainMap

dict(ChainMap(*list_of_dicts[::-1]))

Out[88]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值