有没有一种方法可以有效地迭代字典中的值/项目,同时适用于 Python 2 和 Python 3?
在 Python 2 中,我可以写
for x in mydict:
for x in mydict.iterkeys():
for x in mydict.viewkeys():
for x in mydict.itervalues():
for x in mydict.viewvalues():
for x in mydict.iteritems():
for x in mydict.viewitems():
在 Python 3 中,我有以下可能性:
for x in mydict:
for x in mydict.keys():
for x in mydict.values():
for x in mydict.items():
因此,我可以使用 for x in mydict
迭代键,这在 Python 2 和 3 中都有效。但是有没有一种方法可以迭代值和键值对 ('项目')普遍适用?我需要它来编写可以在两个 Python 版本中运行的 Python 代码。
(附带说明,可以轻松绕过迭代器的其他障碍;例如:
if sys.version_info.major<3:
from itertools import izip as zip, imap as map
但是,字典方法不能像 map
和 zip
那样轻易地重新定义。)
有什么想法吗?
最佳答案
just another dunce's answer 的 values() 版本
for value in (mydict[key] for key in mydict):
或
def dict_values(d):
return (mydict[key] for key in mydict)
def dict_items(d):
return ((key, mydict[key]) for key in mydict)
for value in dict_values(mydict):
...
for value in dict_items(mydict):
...
虽然这很糟糕。您可以检查 python 版本,而不是返回生成器,而是根据需要返回 d.items()
或 d.iteritems()
我认为一个更好的问题可能是如何编写与 2to3 配合良好的 Python2 代码并生成良好的 Python3 代码
关于python - 在 Python 2 和 3 中统一迭代字典的生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10408119/