Python 代碼閱讀合集介紹:為什么不推薦Python初學(xué)者直接看項目源碼
本篇閱讀的代碼實現(xiàn)了將一個字典進行反轉(zhuǎn)假瞬,且原字典的值非唯一命咐。
本篇閱讀的代碼片段來自于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
函數(shù)接收一個字典褥民,返回反轉(zhuǎn)后的字典。函數(shù)使用dictionary.items()
循環(huán)獲取每一個原字典的鍵值對,使用dictionary.setdefault()
和append()
將原字典的值映射到鍵上。使用list()
將新鍵的值定義為列表揩徊。
因為原字典的所有值不唯一,反轉(zhuǎn)字典之后藐握,新的鍵也可能對應(yīng)多個值靴拱。因此反轉(zhuǎn)后的字典的值是一個列表,每個列表中的元素是原字典的一個或多個鍵猾普。
dictionary. setdefault(key[, default])
如果字典存在鍵key
袜炕,返回它的值。如果不存在初家,插入值為default
的鍵key
偎窘,并返回default
。
for key, value in obj.items():
inv_obj.setdefault(value, list()).append(key)
如果新的字典inv_obj
已經(jīng)有key == value
溜在,就會返回這個key
對應(yīng)的值(一個列表)陌知,然后使用append
將原字典的鍵加入其中。如果新的字典inv_obj
沒有key == value
掖肋,就會插入這個key
仆葡,設(shè)置它的值為list()
,并返回這個空列表。然后使用append
將原字典的鍵加入其中沿盅。