一個Python字典可能只包含幾個鍵——值對,也可能包含數(shù)百萬個鍵——值對。鑒于字典可能包含大量的數(shù)據(jù),Python支持對字典遍歷。字典可用于以各種方式存儲信息,因此有多種遍歷字典的方式:可遍歷字典的所有鍵——值對、鍵或值。
python大大的圖

我的圖

1.遍歷所有的鍵——值對
要編寫用于遍歷字典的for循環(huán),可聲明兩個變量,用于存儲鍵——值對中的鍵和值。對于這兩個變量,可使用任何名稱。for語句的第二部分包含字典名和方法items(),它返回一個鍵——值對列表。接下來,for循環(huán)依次將每個鍵——值對存儲到指定的兩個變量中。我們使用這兩個變量來打印每個鍵及其相關(guān)的值。第一條print語句中的"\n"確保在輸出每個鍵——值對前都插入一個空行。
注意,即使遍歷字典時,鍵——值對的返回順序也與存儲順序不同。Python不關(guān)心鍵——值對的存儲順序,而只跟蹤鍵和值之間的關(guān)聯(lián)關(guān)系。
2.遍歷字典中的所有鍵
在不需要使用字典中的值時,方法keys()很有用。第八行讓Python提取字典user_0中所有鍵,并依次將它們存儲到變量key中。遍歷字典時默認遍歷所有的鍵,因此如果將for key in user_0.keys():改為for key in user_0:,輸出將不變。

如果顯示地使用方法keys()可讓代碼更容易理解,你可以選擇這樣做,但如果你愿意,也可省略它。
方法keys()并非只能用于遍歷;實際上,它返回一個列表,其中包含字典中的所有鍵。我們用if語句判斷'erin'是否處于這個列表中,如果不在,就打印一條消息,邀請她參加調(diào)查

3.按字母順序遍歷字典中所有鍵
字典總是明確地記錄鍵和值之間的關(guān)聯(lián)關(guān)系,但獲取字典的元素時,獲取順序是不可預測的。這不是問題,因為通常你想要的只是獲取與鍵相關(guān)聯(lián)的正確的值。要以特定的順序返回元素,一種方法是在for循環(huán)中對返回的鍵進行排序。為此,可使用函數(shù)sorted()來獲得按特定順序排列的鍵列表的副本。

這條for語句類似于其他for語句,但對dictionary.keys()的結(jié)果調(diào)用了函數(shù)sorted()。這讓Python列出字典中的所有鍵,并在遍歷前對這個列表進行排序。輸出表明,鍵按照首字母從小到大排列。
函數(shù)原型
sorted(iterable, key, reverse)
其中iterable表示可以迭代的對象,例如可以是dict.items()、dict.keys()等,key是一個函數(shù),用來選取參與比較的元素,reverse則是用來指定排序是倒序還是順序,reverse=true是倒序,reverse=false是順序,默認reverse=false。
在sorted()里的user_0.keys()將字典轉(zhuǎn)化為列表,因此可以使用索引,用lambda函數(shù)按key中索引為1的元素正序排序,結(jié)果如下圖。這里需要注意的是,字典本身是沒法按索引取值的,因為它沒有固定的順序,只能按鍵取值。

按第一個元素倒序排列結(jié)果如下

4.遍歷字典中所有值
如果你感興趣的主要是字典包含的值,可使用方法values(),它返回一個列表,而不包含任何鍵。這種做法提取字典中所有的值,而沒有考慮是否重復。涉及的值很少時,這也許不是問題,但如果被調(diào)查者很多,最終的列表可能包含大量的重復項。為剔除重復項,可使用集合(set)。集合類似于列表,但每個元素都必須是獨一無二的。
在遍歷值時無法根據(jù)值取出鍵。由于字典是hash的,我們只能通過鍵得到值,不能通過值得到鍵。這也很好理解,不同的鍵可以對應同一個值,因此我們?nèi)フ疫@個值的鍵是不唯一的。由此看來,我們用for循環(huán)遍歷字典的時候只存在兩種方法,要么遍歷鍵和值,要么遍歷鍵。我們可以遍歷值,但是這樣沒有函數(shù)可以得到它的鍵。
雖然我們不能通過遍歷值遍歷字典,但是我們可以寫if語句得到值對應的鍵
