gpt4 book ai didi

python - 在 for 循环中使用 append 方法

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:08 25 4
gpt4 key购买 nike

我目前正在查看来自 Think Python 的代码片段,它使用 setdefault 方法实现倒排字典,但我不清楚它为什么起作用:

def invert_dict(d):
"""Inverts a dictionary, returning a map from val to a list of keys.

If the mapping key->val appears in d, then in the new dictionary
val maps to a list that includes key.

d: dict

Returns: dict
"""
inverse = {}
for key, val in d.iteritems():
inverse.setdefault(val, []).append(key)
return inverse

在 for 循环中从左到右读取,inverse.setdefault(val, []) 在字典中创建一个条目,而不是列表。那么我们如何使用append方法呢?

最佳答案

可以使用append方法,因为setdefault本身在必要时会返回dict[val]初始化后的值。因此,第一次对特定字典键调用 setdefault 时,它将 inverse[val] 设置为第二个参数(空列表)然后返回该空列表。那就是您要附加到的列表。

这个特定的范例对于这个特定的用例来说已经过时了,顺便说一句。现在最好的方法是:

import collections
inverse = collections.defaultdict(list)
for key, val in d.items():
inverse[val].append(key)

原因是setdefault每次遍历列表都会创建一个新的空列表对象,如果inverse[val]已经存在,则立即丢弃新创建的对象。

此外,iteritems() 对于 Python 2 仍然更有效,但它在 Python 3 中不存在,Python 3 中的 items() 与 Python 2 中的 iteritems() 工作方式相同。

关于python - 在 for 循环中使用 append 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31766316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com