1. 程式人生 > 其它 >Python程式碼閱讀(第33篇):反轉字典

Python程式碼閱讀(第33篇):反轉字典

本篇閱讀的程式碼實現了將一個字典進行反轉,且原字典的值非唯一。 本篇閱讀的程式碼片段來自於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將原字典的鍵加入其中。