[英]Python: can I use dict update inside the map function?
我有以下输入inp = [{1:100}, {3:200}, {8:300}]
我想将其转换为字典。 我可以
dct = dict()
for a in inp:
dct.update(a)
或者我可以
_ = [dct.update(a) for a in inp]
但我想做类似的事情:
map(dct.update, inp)
方法map
构建了一个迭代器,因此仅在需要时进行计算。 所以你需要强制计算,例如使用列表
list(map(dct.update, inp))
print(dct)
但是您不应该使用列表推导或map
操作来生成值
你最好保留你的for-loop
或dict-comprehension
dct = {key:val for item in inp for key,val in item.items()}
为什么使用 map 来完成这项任务?
如果你想在一行中解决它,你可以这样做:
dct={k:v for x in inp for k,v in x.items()}
使用链条 Map:
from collections import ChainMap
inp = [{1: 100}, {3: 200}, {8: 300}]
data = dict(ChainMap(*inp))
你想要的是reduce
,而不是map
。 map
通过将 function 应用于给定序列的每个元素来创建序列,而reduce
在序列上累积 object。
from functools import reduce
inp = [{1:100}, {3:200}, {8:300}]
dct = {}
reduce(lambda d1, d2: (d1.update(d2) or d1), inp, dct)
{1: 100, 3: 200, 8: 300}
这个lambda
零件可能看起来很棘手。 这样做是创建一个 function 更新字典并返回字典本身。 这是因为reduce
期望累积 function 返回更新后的 object 而dict.update()
返回None
。 由于None
被解释为 False, or
运算符返回第二个变量,即更新后的字典。
这个or
技巧归功于此线程中的@kostya-goloveshko: 为什么 python dict.update() 不返回 object?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.