鍍金池/ 問答/Java  Python/ python:如何連續(xù)使用方法

python:如何連續(xù)使用方法

inverse.setdefault(val, []).append(key)

請問這句話實現(xiàn)什么功能,使用一個方法很好理解,可連續(xù)使用兩個方法我不明白值是怎么傳遞的了。

以下是完整的代碼

def invert_dict(d):
    inverse = {}
    for key in d:
        val = d[key]
        inverse.setdefault(val, []).append(key)
    return inverse
回答
編輯回答
吢涼

inverse.setdefault(val, []).append(key)

它等同于:

if val not in inverse:
    inverse[val] = []
inverse[val].append(key)

更詳細一點,如果把setdefaultappend拆開來看的話

首先調(diào)用inverse.setdefault(val, []),意思是如果val這個鍵不存在的話,就添加這個鍵,并且值為[],如果存在的話就什么都不發(fā)生

然后再調(diào)用append(key),這里就是往[]里添加數(shù)據(jù)了

如果不調(diào)用setdefault(val, [])而直接調(diào)用inverse[val].append(key)的話,那么當val這個鍵不存在時,會報異常

>>> d = {}
>>> d[1].append(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 1

而調(diào)用setdefault(val, [])則沒有這個問題

>>> d = {}
>>> d.setdefault(1, []).append(2)
>>> print(d)
{1: [2]}
2018年7月4日 16:48