Think Python Exercise 11.2 字典方法setdefault

查看字典方法setdefault的文档, 并使用该方法写一个更简洁的invert_dict

原来的函数的定义:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def invert_dict(d):
    """倒转一个字典,将原字典的值作为键,原字典的键作为值。
    """
    inverse = dict()
    for key in d:
        val = d[key]
        if val not in inverse:
            inverse[val] = [key] #反转后,一个键可能对应多个值,所以把值放到列表里
        else:
            inverse[val].append(key) #相当于给列表追加一个值。键val的值是一个列表。
    return inverse

文档链接:这里

setdefault(key[, default]), 如果字典存在键 key ,返回它的值。如果不存在,插入值为 default 的键 key ,并返回 default 。 default 默认为 None

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def invert_dict(d):
    """倒转一个字典,将原字典的值作为键,原字典的键作为值。
    """
    inverse = dict()
    for key in d:
        inverse[d[key]]=inverse.setdefault(d[key],[])+[key]
    return inverse

A = {'a':2,'b':3,'c':2}
invert_dict(A)

做这种题有助于提高自信。不建议看答案,看完你会有:“为啥我就没想到”这种想法,进一步怀疑自己的智商。