gpt4 book ai didi

python - 在 Python 2 和 3 中统一迭代字典的生成器

转载 作者:太空狗 更新时间:2023-10-29 20:39:02 25 4
gpt4 key购买 nike

有没有一种方法可以有效地迭代字典中的值/项目,同时适用于 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

但是,字典方法不能像 mapzip 那样轻易地重新定义。)

有什么想法吗?

最佳答案

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com