Python程式碼閱讀(第33篇):反轉字典
阿新 • • 發佈:2021-11-09
本篇閱讀的程式碼實現了將一個字典進行反轉,且原字典的值非唯一。
本篇閱讀的程式碼片段來自於30-seconds-of-python。
Python 程式碼閱讀合集介紹:為什麼不推薦Python初學者直接看專案原始碼
本篇閱讀的程式碼實現了將一個字典進行反轉,且原字典的值非唯一。
本篇閱讀的程式碼片段來自於30-seconds-of-python。
collect_dictionary
def collect_dictionary(obj): inv_obj = {} for key, value in obj.items(): inv_obj.setdefault(value, list()).append(key) return inv_obj # EXAMPLES ages = { "Peter": 10, "Isabel": 10, "Anna": 9, } collect_dictionary(ages) # { 10: ["Peter", "Isabel"], 9: ["Anna"] }
collect_dictionary
函式接收一個字典,返回反轉後的字典。函式使用dictionary.items()
迴圈獲取每一個原字典的鍵值對,使用dictionary.setdefault()
和append()
將原字典的值對映到鍵上。使用list()
將新鍵的值定義為列表。
因為原字典的所有值不唯一,反轉字典之後,新的鍵也可能對應多個值。因此反轉後的字典的值是一個列表,每個列表中的元素是原字典的一個或多個鍵。
dictionary. setdefault(key[, default])
如果字典存在鍵key
,返回它的值。如果不存在,插入值為default
的鍵key
,並返回default
。
for key, value in obj.items(): inv_obj.setdefault(value, list()).append(key)
如果新的字典inv_obj
已經有key == value
,就會返回這個key
對應的值(一個列表),然後使用append
將原字典的鍵加入其中。如果新的字典inv_obj
沒有key == value
,就會插入這個key
,設定它的值為list()
,並返回這個空列表。然後使用append
將原字典的鍵加入其中。