Python 嵌套字典理解
有人可以解释如何进行嵌套字典理解吗?
>> j = dict(((x+y,0) for x in 'cd') for y in 'ab')
>> {('ca', 0): ('da', 0), ('cb', 0): ('db', 0)}
我会喜欢:
>> j
>> {'ca':0, 'cb':0, 'da':0, 'db':0}
谢谢!
Can someone explain how to do nested dict comprehensions?
>> j = dict(((x+y,0) for x in 'cd') for y in 'ab')
>> {('ca', 0): ('da', 0), ('cb', 0): ('db', 0)}
I would have liked:
>> j
>> {'ca':0, 'cb':0, 'da':0, 'db':0}
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用 itertools 中的笛卡尔积将其简化为单个循环
You can simplify this to a single loop by using the cartesian product from itertools
顺便说一句,我们所说的字典理解类似于以下内容,仅在 Python2.7+ 中可用:
BTW, what we call dict comprehension is something like the following which is only available in Python2.7+:
问题中额外的括号引入了另一个生成器表达式,该表达式生成 2 个生成器,每个生成器生成 2 个元组。下面的列表理解准确地显示了正在发生的事情。
列表理解而不是生成器表达式显示了上面的生成器包含的内容
,这就是为什么您获得元组对的两个键值。
为什么 mouad 的答案有效
在 Python 2.7 和 3.0 及更高版本中,您可以使用 dict 理解
The extra parentheses in the question introduce another generator expression that yields 2 generators each yielding 2 tuples. The list comprehension below shows exactly what is happening.
A list comprehension instead of the generator expression shows what the generators above contain
And that is why you were getting two key-value of pairs of tuples.
Why mouad's answer works
In Python 2.7 and 3.0 and above, you can use dict comprehensions