【问题标题】:Python - Iterating Variable in Dictionary - TypeError: 'int' object is not subscriptablePython - 字典中的迭代变量 - TypeError:'int'对象不可下标
【发布时间】: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


【解决方案1】:

当您在 hists 中执行 hist 时,您得到的是实际元素,而不是索引。因此,对于您的示例, hist 将具有 [1,2,3] 并且 hist 变量将具有 1,2 和 3 值。而 1[0] 显然会给你一个错误,因为 1 是一个 int,你不能下标一个 int。而且您不必担心最大值,这在while循环中会是一个问题,而不是循环。

要遍历字典,当您不删除或添加新键时,只需执行以下操作

for key in my_dict:
    curr_val = my_dict[key]   #This will give you the value at key

如果你只想找到最大密钥,那么这可以很容易地完成

max_key = max(list(my_dict))

【讨论】:

    猜你喜欢
    • 2015-04-06
    • 2013-10-31
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2017-09-11
    相关资源
    最近更新 更多