跳到内容

incorrect-dict-iterator (PERF102)

源自 Perflint linter。

修复总是可用的。

作用

检查在迭代字典时,使用了 dict.items() 但丢弃了键或值的情况。

为什么这不好?

如果只需要字典的键或值,则应分别使用 dict.keys()dict.values(),而不是 dict.items()。这些专用方法比 dict.items() 更高效,因为它们避免了为字典中的每个项目分配元组。它们也更清晰地传达了代码的意图。

请注意,与所有 perflint 规则一样,这仅用作微优化,并且在大多数情况下对性能的影响可以忽略不计。

示例

obj = {"a": 1, "b": 2}
for key, value in obj.items():
    print(value)

建议改为

obj = {"a": 1, "b": 2}
for value in obj.values():
    print(value)

修复安全性

此修复不会执行任何类型分析,因此,如果相关对象未作为映射进行鸭子类型(例如,如果它缺少 .keys().values() 方法,或者这些方法的行为与标准映射类型上的行为不同),则可能会建议错误的修复。