簡體   English   中英

Python嵌套dict理解

[英]Python nested dict comprehension

有人可以解釋如何做嵌套的字典理解嗎?

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

謝謝!

dict((x+y,0) for x in 'cd' for y in 'ab')

您可以使用itertools中的笛卡爾積將其簡化為單循環

>>> from itertools import product
>>> j=dict((x+y,0) for x,y in product('cd','ab'))
>>> j
{'cb': 0, 'ca': 0, 'db': 0, 'da': 0}
>>> 
dict((x+2*y, 0) for x in range(1,4,2) for y in range(15, 18, 2))

順便說一句,我們稱之為dict理解就像下面這樣只有Python2.7 +才能提供:

{x+2*y:0 for x in range(1,4,2) for y in range(15, 18, 2)}

問題中的額外括號引入了另一個生成器表達式,它產生2個生成器,每個生成器產生2個元組。 下面的列表理解准確地顯示了正在發生的事情。

>>> [w for w in (((x+y,0) for x in 'cd') for y in 'ab')]
[<generator object <genexpr> at 0x1ca5d70>, <generator object <genexpr> at 0x1ca5b90>]

列表理解而不是生成器表達式顯示上面的生成器包含的內容

>>> [w for w in ([(x+y,0) for x in 'cd'] for y in 'ab')]
[[('ca', 0), ('da', 0)], [('cb', 0), ('db', 0)]]

這就是為什么你得到兩對元組的關鍵值。

為什么穆阿德的回答有效

>>> [w for w in ((x+y,0) for x in 'cd' for y in 'ab')]
[('ca', 0), ('cb', 0), ('da', 0), ('db', 0)]

在Python 2.7和3.0及更高版本中,您可以使用dict理解

>>> j = {x+y:0 for x in 'cd' for y in 'ab'}
>>> j
{'cb': 0, 'ca': 0, 'db': 0, 'da': 0}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM