python:如何连续使用方法

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

请问这句话实现什么功能,使用一个方法很好理解,可连续使用两个方法我不明白值是怎么传递的了。

以下是完整的代码

def invert_dict(d):
    inverse = {}
    for key in d:
        val = d[key]
        inverse.setdefault(val, []).append(key)
    return inverse
阅读 2.6k
1 个回答

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

它等同于:

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

更详细一点,如果把setdefaultappend拆开来看的话

首先调用inverse.setdefault(val, []),意思是如果val这个键不存在的话,就添加这个键,并且值为[],如果存在的话就什么都不发生

然后再调用append(key),这里就是往[]里添加数据了

如果不调用setdefault(val, [])而直接调用inverse[val].append(key)的话,那么当val这个键不存在时,会报异常

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

而调用setdefault(val, [])则没有这个问题

>>> d = {}
>>> d.setdefault(1, []).append(2)
>>> print(d)
{1: [2]}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题