我应该将dict.keys()转换为list(dict.keys())以便在Python3中进行迭代吗?2to3建议转换为

问题描述 投票:2回答:2

我正在进行迁移,Python2Pytnon32to3。 (恰恰是Python2.7.12Python3.5.2

在进行迁移时,2to3建议我使用如下所示的类型转换。

a = {1: 1, 2: 2, 3: 3}

for i in a.keys():  ----> for i in list(a.keys()):
    print(i)

之后,我尝试检查脚本中有什么区别。

$ python3
>>> a = {1: 1, 2: 2, 3: 3}
>>> a.keys()
dict_keys([1, 2, 3])
>>> for i in a.keys(): print(i)
1
2
3

它显然返回不同类型dict_keys不是listdict_keys似乎仍然使用looplist没有类型转换在上面的简单代码。

我想知道如果我使用没有类型转换,会有一些副作用或不。如果什么都没有,它看起来不必要的操作。

为什么2to3建议?

python-3.x python-2.7 python-2to3
2个回答
3
投票

通常它对迭代无关紧要,但是如果你尝试取一个索引就好了,因为keys()不是py3中的列表,所以你不能取它的索引,它通常是一个安全的操作,知道列表调用的成本,通常如果它在py2中没问题,它将在py3中正常。


1
投票

这是一个具体的例子,在python3中

a = {1: 1, 3: 2, 2: 3}
>>> a
{1: 1, 2: 3, 3: 2}
>>> a.keys()
dict_keys([1, 2, 3])
>>> type(a.keys())
<class 'dict_keys'>
>>> 

而在python 2中

 a={1: 1, 2: 3, 3: 2}
>>> type(a.keys())
<type 'list'>
>>> 

正如Grady所说,对于迭代,一切都运行良好但是如果你正在设计一个接收Python 2中的键列表并将它移植到python 3并应用于它的列表函数的应用程序,它肯定会抛出一个错误

© www.soinside.com 2019 - 2024. All rights reserved.