【发布时间】:2018-09-22 03:46:16
【问题描述】:
代码在 Python 2 中有效,但在 Python 3 中无效,并且得到:-
类型错误:
'int' 对象不可下标
在遍历循环时尝试获取字典键的长度。
循环遍历每个键,并在达到最大值之前和达到最大值时寻求做事。寻找有关为什么 TypeError 和帮助的指导。
这是带有键的示例字典:1、2、3。
my_dict = {1: a, 2: b, 3: c}
将 int 设置为名称 max,因为需要发生一些事情
max = 3
Python 3
hists = list(my_dict.copy().keys())
for hist in hists:
if len(hist[0]) < max - 1: # <-- TypeError: 'int' object is not subscriptable)
print("pass")
elif len(hist[0]) == max:
print("equal max")
Python 3,我们需要锁定键,保护键顺序的迭代并通过复制到新字典来做到这一点。因为python 3 .keys() 返回的是一个可迭代的视图,不像python 2。要按顺序获取键,我们需要转换为一个列表,这似乎也设置了顺序。
在 Python 2 中,使用 .key() 时会设置顺序,不需要关心视图。在循环中使用字典键很常见。
当字典没有实时更新时可以使用。发现它往往更昂贵且速度更慢。
【问题讨论】:
-
这肯定也会以同样的方式在 Python 2 中失败...一个问题,你 期望
hist[0]做什么??? -
你的
hist[0]是什么,是列表还是整数值? -
hist是一个 int(1、2 或 3)。 -
注意,
hists = list(my_dict.copy().keys())是一种不必要的复杂处理方式hists = list(my_dict) -
需要工作的复杂操作。 .keys()) 在 Python 2 中工作。
标签: python-3.x python-2.7 loops dictionary key