在所有地方使用 items()
而不是 iteritems()
是否合法?为什么 iteritems()
从 Python 3 中删除?看起来像一个了不起的和有用的方法。其背后的原因是什么?
编辑: 为了澄清,我想知道以与 Python 2 和 Python 3 兼容的方式以类似生成器的方式(一次一个项目,而不是全部进入内存)迭代字典的正确习惯用法是什么?
原文由 user248237 发布,翻译遵循 CC BY-SA 4.0 许可协议
在所有地方使用 items()
而不是 iteritems()
是否合法?为什么 iteritems()
从 Python 3 中删除?看起来像一个了不起的和有用的方法。其背后的原因是什么?
编辑: 为了澄清,我想知道以与 Python 2 和 Python 3 兼容的方式以类似生成器的方式(一次一个项目,而不是全部进入内存)迭代字典的正确习惯用法是什么?
原文由 user248237 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
1 回答3.1k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
在 Python 2.x 中 -
.items()
返回(键,值)对列表。在 Python 3.x 中,.items()
现在是一个itemview
对象,它的行为不同 - 所以它 必须 被迭代或具体化……所以,list(dict.items())
对于 Python 2.x 中的dict.items()
是必需的。Python 2.7 也有一些用于密钥处理的后向端口,因为你有
viewkeys
,viewitems
和viewvalues
是最有用的viewkeys
其行为更像是set
(你期望来自dict
)。简单示例:
将为您提供常用键的列表,但同样,在 Python 3.x 中 - 只需使用
.keys()
代替。Python 3.x has generally been made to be more “lazy” - ie
map
is now effectivelyitertools.imap
,zip
isitertools.izip
,等等