我是否应该将 dict.keys() 转换为 list(dict.keys()) 以在 Python3 中进行迭代?2to3 建议将其转换
Should I convert dict.keys() into list(dict.keys()) for iteration in Python3?, 2to3 suggests converting that
我正在进行迁移,Python2
到 Pytnon3
2to3
。
(Python2.7.12
和 Python3.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
显然 returns 不同的类型 dict_keys
不是 list
但 dict_keys
似乎仍然可以与 loop
一起工作,就像 list
没有类型- 在上面的简单代码中进行转换。
我想知道如果我不使用类型转换,会不会有一些副作用。
如果什么都没有,看起来是不必要的操作。
为什么 2to3
这么建议?
一般来说它对迭代没有影响,但是如果你尝试获取索引就很重要了,因为 keys() 不是 py3 中的列表,所以你不能获取它的索引,它通常是一个安全的操作,知道列表调用的成本,通常如果在 py2 中可以,那么在 py3 中也可以。
这里有一个具体的例子,在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 并应用于它列表函数,肯定会报错
我假设这只是最近才成为现实,但现在 keys() 是一个列表类型,所以我认为将其类型转换为列表没有任何作用,如果我错了请纠正我。
编辑:
没关系,显然我使用的程序是旧版本的 python。我尝试了 python 的更新版本,它 returns 键入 dict_keys。
我正在进行迁移,Python2
到 Pytnon3
2to3
。
(Python2.7.12
和 Python3.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
显然 returns 不同的类型 dict_keys
不是 list
但 dict_keys
似乎仍然可以与 loop
一起工作,就像 list
没有类型- 在上面的简单代码中进行转换。
我想知道如果我不使用类型转换,会不会有一些副作用。 如果什么都没有,看起来是不必要的操作。
为什么 2to3
这么建议?
一般来说它对迭代没有影响,但是如果你尝试获取索引就很重要了,因为 keys() 不是 py3 中的列表,所以你不能获取它的索引,它通常是一个安全的操作,知道列表调用的成本,通常如果在 py2 中可以,那么在 py3 中也可以。
这里有一个具体的例子,在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 并应用于它列表函数,肯定会报错
我假设这只是最近才成为现实,但现在 keys() 是一个列表类型,所以我认为将其类型转换为列表没有任何作用,如果我错了请纠正我。
编辑: 没关系,显然我使用的程序是旧版本的 python。我尝试了 python 的更新版本,它 returns 键入 dict_keys。