[英]Iterating over list of dictionaries in 2 dimensional list comprehension
我不明白为什么列表理解不正确。 如果我正确理解列表推导,则应首先遍历列表[dict1,dict2]中的字典,然后遍历每个字典中的键-值对并返回值。 我错了吗?
dict1 = {'a' : 1, 'b' : 2, 'c' : 3}
dict2 = {'c' : 2, 'd' : 3, 'e' : 4}
[value for key, value in d.items()
for d in [dict1, dict2]]
它给出以下错误:
NameError Traceback (most recent call last)
<ipython-input-78-e8d31c1fb24a> in <module>()
1 dict1 = {'a' : 1, 'b' : 2, 'c' : 3}
2 dict2 = {'c' : 2, 'd' : 3, 'e' : 4}
----> 3 [value for (key, value) in d.items()
4 for d in [dict1, dict2]]
NameError: name 'd' is not defined
我期望:
[1,2,3,2,3,4]
也许这样更易读
from itertools import chain
d = [{'a' : 1, 'b' : 2, 'c' : 3}, {'c' : 2, 'd' : 3, 'e' : 4}]
chain.from_iterable(map(dict.values, d))
[3,1,2,2,4,3]
将每个dict
仅映射到其值并chain
结果。 顺序不一样,但是您会期望的。
列表理解中嵌套for循环的顺序是相反的。 在列表理解中,第一个for循环是首先执行的外部for循环,然后是第二个for循环。 因此,如果您切换顺序,则应该可以正常工作:
[value for d in [dict1, dict2] for key, value in d.items()]
# [1, 3, 2, 2, 4, 3]
尝试在Python中使用lambda函数的优势:
map(lambda x: x[1], reduce(lambda x,y: x.items()+y.items(), [dict1, dict2]))
这会给你想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.