天天看點

《Python Cookbook(第3版)中文版》——1.6 在字典中将鍵映射到多個值上

本節書摘來自異步社群《python cookbook(第3版)中文版》一書中的第1章,第1.6節,作者[美]david beazley , brian k.jones,陳舸 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

我們想要一個能将鍵(key)映射到多個值的字典(即所謂的一鍵多值字典[multidict])。

字典是一種關聯容器,每個鍵都映射到一個單獨的值上。如果想讓鍵映射到多個值,需要将這多個值儲存到另一個容器如清單或集合中。例如,可能會像這樣建立字典:

要使用清單還是集合完全取決于應用的意圖。如果希望保留元素插入的順序,就用清單。如果希望消除重複元素(且不在意它們的順序),就用集合。

為了能友善地建立這樣的字典,可以利用collections子產品中的defaultdict類。defaultdict的一個特點就是它會自動初始化第一個值,這樣隻需關注添加元素即可。例如:

關于defaultdict,需要注意的一個地方是,它會自動建立字典表項以待稍後的通路(即使這些表項目前在字典中還沒有找到)。如果不想要這個功能,可以在普通的字典上調用setdefault()方法來取代。例如:

然而,許多程式員覺得使用setdefault()有點不自然——更别提每次調用它時都會建立一個初始值的新執行個體了(例子中的空清單[])。

原則上,建構一個一鍵多值字典是很容易的。但是如果試着自己對第一個值做初始化操作,這就會變得很雜亂。例如,可能會寫下這樣的代碼:

使用defaultdict後代碼會清晰得多: