閱讀diveintopython3發現這一點,並不能解構成我理解的小比特。這個變量在哪裏定義?
>>> a_dict = {'a': 1, 'b': 2, 'c': 3}
>>> {value:key for key, value in a_dict.items()}
>>> {1: 'a', 2: 'b', 3: 'c'}
a_dict.items()創建一個列表。但值a_dict.items()對我來說沒有意義,因爲價值沒有定義...
這是怎麼回事?
閱讀diveintopython3發現這一點,並不能解構成我理解的小比特。這個變量在哪裏定義?
>>> a_dict = {'a': 1, 'b': 2, 'c': 3}
>>> {value:key for key, value in a_dict.items()}
>>> {1: 'a', 2: 'b', 3: 'c'}
a_dict.items()創建一個列表。但值a_dict.items()對我來說沒有意義,因爲價值沒有定義...
這是怎麼回事?
a_dict.keys()
是在你的字典
a_dict.values()
鍵的列表是在你的字典值列表
a_dict.items()
是清單(鍵值)對
{value:key for key, value in a_dict.items()}
是字典()理解這需要a_dict
和切換其鍵以其值,返回一個新的數據結構作爲結果。如果仔細觀察,可以看到在結果部分有value:key
,但在迭代部分我們有key, value
- 它們切換!非常棘手,非常pythonic。
如果a_dict
中沒有重複的值,則會導致原始字典的反轉。如果有重複,由於新詞典中的所有鍵都必須是唯一的,因此每個重複值的映射只能有一個存活。
>>> a_dict = {'a': 1, 'b': 2, 'c': 3}
>>> b_dict = {value:key for key, value in a_dict.items()}
>>> a_dict.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> b_dict.items()
[(1, 'a'), (2, 'b'), (3, 'c')]
>>> a_dict.keys()
['a', 'c', 'b']
>>> b_dict.values()
['a', 'b', 'c']
>>> a_dict.values()
[1, 3, 2]
>>> b_dict.keys()
[1, 2, 3]
# Try one with duplicates!
>>> c_dict = {'a': 1, 'b': 2, 'c': 3, 'd':2}
>>> d_dict = {value:key for key, value in c_dict.items()}
# The number 2 can only map to one value;
# the constructor seems to have encountered 'd' last
>>> c_dict.items()
[('a', 1), ('c', 3), ('b', 2), ('d', 2)]
>>> d_dict.items()
[(1, 'a'), (2, 'd'), (3, 'c')]
這裏有一個字典()理解如果您遇到困難,瞭解他們是如何工作的一個簡單的例子;將它輸入到交互式編輯器中,然後解決它!
>>> e_dict = {n: str(n) * n for n in range(1, 30)}
值清楚地定義如下:
'a':1
這意味着索引「A」具有爲1的值,等等,等等。
第二行剛剛創建了一個使用值作爲鍵和鍵作爲第一個字典值的字典。
顯然是一個相對的術語... – 2012-03-12 04:50:17
我沒有使用術語「明確」來冒犯任何人或任何東西。我使用它是因爲它明確定義,沒有函數,表達式等,與模糊定義相反,這意味着它是通過函數或表達式生成的。 – DanRedux 2012-03-12 04:52:33
value和key只是字典實際內容的佔位符。這基本上意味着對於字典中的每個鍵:值對,值部分將被分配給值並且鍵部分被鍵入。
內容的價值和重點:
iteration value key
1 1 'a'
2 2 'b'
3 3 'c'
這條線:
{value:key for key, value in a_dict.items()}
之所以稱之爲字典解析,這是類同列出內涵。 PEP 274爲您提供了有關此語法的更多詳細信息。
該表達式擴展爲:
temp_dict = dict()
for key, value in a_dict.items():
temp_dict[value] = key
print temp_dict
爲PEP +1! :) – 2012-03-12 05:06:26
在簡單的英語,你的'for'是說:拔出分配給它的每個'key'和'value'並將其存儲在相應的變量。方便,呃? – rjz 2012-03-12 04:04:59
看着它上面的顏色語法突然點擊..我注意到它只是一個>>>的東西在:東西是兩個變量而不是1的東西。原來我雖然逗號代表東西待辦事項與外{{ 。我不習慣看到內部陳述 – 2012-03-12 04:58:28
你已經明白了! @machine嚮往的答案提供了一些很好的細節澄清:^) – rjz 2012-03-12 05:00:34