什么时候应该使用 iteritems() 而不是 items()?

新手上路,请多包涵

在所有地方使用 items() 而不是 iteritems() 是否合法?为什么 iteritems() 从 Python 3 中删除?看起来像一个了不起的和有用的方法。其背后的原因是什么?

编辑: 为了澄清,我想知道以与 Python 2 和 Python 3 兼容的方式以类似生成器的方式(一次一个项目,而不是全部进入内存)迭代字典的正确习惯用法是什么?

原文由 user248237 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 385
2 个回答

在 Python 2.x 中 - .items() 返回(键,值)对列表。在 Python 3.x 中, .items() 现在是一个 itemview 对象,它的行为不同 - 所以它 必须 被迭代或具体化……所以, list(dict.items()) 对于 Python 2.x 中的 dict.items() 是必需的。

Python 2.7 也有一些用于密钥处理的后向端口,因为你有 viewkeysviewitemsviewvalues 是最有用的 viewkeys 其行为更像是 set (你期望来自 dict )。

简单示例:

 common_keys = list(dict_a.viewkeys() & dict_b.viewkeys())

将为您提供常用键的列表,但同样,在 Python 3.x 中 - 只需使用 .keys() 代替。

Python 3.x has generally been made to be more “lazy” - ie map is now effectively itertools.imap , zip is itertools.izip ,等等

原文由 Jon Clements 发布,翻译遵循 CC BY-SA 4.0 许可协议

dict.iteritems was removed because dict.items now does the thing dict.iteritems did in python 2.x and even improved it a bit by making it an itemview

原文由 Wessie 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题