在所有地方使用 items() 而不是 iteritems() 是否合法?为什么 iteritems() 从 Python 3 中删除?似乎是一个了不起且有用的方法.背后的原因是什么?
Is it legitimate to use items() instead of iteritems() in all places? Why was iteritems() removed from Python 3? Seems like a terrific and useful method. What's the reasoning behind it?
为了澄清,我想知道以某种方式(一次一个项目,而不是全部进入内存)以类似生成器的方式迭代字典的正确习语是什么是否与 Python 2 和 Python 3 兼容?
To clarify, I want to know what is the correct idiom for iterating over a dictionary in a generator-like way (one item at a time, not all into memory) in a way that is compatible with both Python 2 and Python 3?
推荐答案在 Python 2.x 中 - .items() 返回(键,值)对的列表.在 Python 3.x 中,.items() 是现在是一个 itemview 对象,它的行为不同 - 所以它必须被迭代或物化......所以,list(dict.items()) 是 Python 2.x 中 dict.items() 所必需的.
In Python 2.x - .items() returned a list of (key, value) pairs. In Python 3.x, .items() is now an itemview object, which behaves different - so it has to be iterated over, or materialised... So, list(dict.items()) is required for what was dict.items() in Python 2.x.
Python 2.7 也有一些用于密钥处理的后向端口,因为您有 viewkeys、viewitems 和 viewvalues 方法,最有用的是viewkeys 的行为更像是一个 set(您期望从 dict 中获得).
Python 2.7 also has a bit of a back-port for key handling, in that you have viewkeys, viewitems and viewvalues methods, the most useful being viewkeys which behaves more like a set (which you'd expect from a dict).
简单例子:
common_keys = list(dict_a.viewkeys() & dict_b.viewkeys())会给你一个常用键的列表,但同样,在 Python 3.x 中 - 只需使用 .keys() 代替.
Will give you a list of the common keys, but again, in Python 3.x - just use .keys() instead.
Python 3.x 通常变得更加懒惰"——即 map 现在有效地itertools.imap, zip 是 itertools.izip 等
Python 3.x has generally been made to be more "lazy" - i.e. map is now effectively itertools.imap, zip is itertools.izip, etc.
更多推荐
什么时候应该使用 iteritems() 而不是 items()?
发布评论