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

时间:2017-12-21 05:04:25

标签: python-3.x python-2.7 python-2to3

我正在使用Python2进行Pytnon32to3的迁移。 (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不是list,但dict_keys似乎仍然可以与loop一样使用list而不使用上述简单的类型转换代码。

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

为什么2to3建议?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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并应用于它列表函数的应用程序,它肯定会抛出错误