Python遍歷字典(62)

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

python大大的圖

圖片發(fā)自簡書App

我的圖

圖片發(fā)自簡書App

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:,輸出將不變。

圖片發(fā)自簡書App

如果顯示地使用方法keys()可讓代碼更容易理解,你可以選擇這樣做,但如果你愿意,也可省略它。

方法keys()并非只能用于遍歷;實際上,它返回一個列表,其中包含字典中的所有鍵。我們用if語句判斷'erin'是否處于這個列表中,如果不在,就打印一條消息,邀請她參加調(diào)查

圖片發(fā)自簡書App

3.按字母順序遍歷字典中所有鍵

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

圖片發(fā)自簡書App

這條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é)果如下圖。這里需要注意的是,字典本身是沒法按索引取值的,因為它沒有固定的順序,只能按鍵取值。

圖片發(fā)自簡書App

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

圖片發(fā)自簡書App

4.遍歷字典中所有值

如果你感興趣的主要是字典包含的值,可使用方法values(),它返回一個列表,而不包含任何鍵。這種做法提取字典中所有的值,而沒有考慮是否重復。涉及的值很少時,這也許不是問題,但如果被調(diào)查者很多,最終的列表可能包含大量的重復項。為剔除重復項,可使用集合(set)。集合類似于列表,但每個元素都必須是獨一無二的。

在遍歷值時無法根據(jù)值取出鍵。由于字典是hash的,我們只能通過鍵得到值,不能通過值得到鍵。這也很好理解,不同的鍵可以對應同一個值,因此我們?nèi)フ疫@個值的鍵是不唯一的。由此看來,我們用for循環(huán)遍歷字典的時候只存在兩種方法,要么遍歷鍵和值,要么遍歷鍵。我們可以遍歷值,但是這樣沒有函數(shù)可以得到它的鍵。

雖然我們不能通過遍歷值遍歷字典,但是我們可以寫if語句得到值對應的鍵

圖片發(fā)自簡書App

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文為《爬著學Python》系列第九篇文章。 從現(xiàn)在開始算是要進入“真刀真槍”的Python學習了。之所以這么說,...
    SyPy閱讀 2,229評論 0 14
  • 本節(jié)要介紹的是Python里面常用的幾種數(shù)據(jù)結(jié)構(gòu)。通常情況下,聲明一個變量只保存一個值是遠遠不夠的,我們需要將一組...
    小黑y99閱讀 65,602評論 0 9
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 心很亂,一直以來是很保守的人,不知道對不對,心里堵的很,又沒辦法傾訴。
    Fiona_攸然閱讀 250評論 0 0
  • 有一個摳門的男朋友是什么樣的體驗? 1.能自己做的堅決不買,比如電腦,比如投影儀。 2.有優(yōu)惠的一定要使用優(yōu)惠活動...
    danaom閱讀 167評論 0 0

友情鏈接更多精彩內(nèi)容