【问题标题】:"Int" object is not iterable“Int”对象不可迭代
【发布时间】:2013-08-02 17:05:43
【问题描述】:

我正在尝试运行一个 for 循环。这是我遇到问题的代码部分:

aldurstengd_ororka = {(18, 19, 20, 21, 22, 23, 24):1, (25):0.95, (26):0.90,
    (27):0.85, (28, 29):0.75, (30, 31):0.65, (32, 33):0.55, (34, 35):0.45,
    (36, 37):0.35, (40, 41, 42, 43, 44, 45):0.15, (46, 47, 48, 49, 50):0.10,
    (51, 52, 53, 54, 55):0.075, (56, 57, 58, 59, 60):0.05, (61, 62, 63, 64,
    65, 66):0.025}

for age in aldurstengd_ororka.keys():
    for item in age:
       if ororkualdur == item:
           baetur = baetur + ororkulifeyrir * aldurstengd_ororka([age])

所以我的意图是遍历 aldurstengd_ororka,并且对于字典中的每个“年龄”元组,我为元组中的每个“项目”运行另一个 for 循环。我得到的错误是

TypeError: 'int' 对象不可迭代

【问题讨论】:

  • 如果您使用您正在使用的编程语言添加标签会有所帮助
  • @alfasin 看起来像 Python。

标签: python object int iterable


【解决方案1】:

字典键有时是元组,有时是整数。正如@Simon Callan 提到的,您可以在数字中添加逗号以使所有键都可迭代。

如果您不想编辑字典,请使用 more_itertools 库中的工具,该工具始终返回可迭代对象。

简化示例:

import more_itertools as mit

d = {
    (18, 19, 20, 21, 22, 23, 24): 1, 
    (25): 0.95, 
    (26): 0.90,
    (27): 0.85, 
    (28, 29): 0.75,
}

for age in d:
    for item in mit.always_iterable(age):
        # Add logic here
        pass

# No TypeError

详情请见the docs

【讨论】:

    【解决方案2】:

    您的元组键中只有一个 int 被解析为 int 而不是元组。因此,当您尝试 for item in age 时-您是在尝试遍历不可迭代的对象。使用列表[4] 或使用逗号(4,),就可以了:

    aldurstengd_ororka = {(18, 19, 20, 21, 22, 23, 24):1, (25):0.95, (26):0.90,
        (27):0.85, (28, 29):0.75, (30, 31):0.65, (32, 33):0.55, (34, 35):0.45,
        (36, 37):0.35, (40, 41, 42, 43, 44, 45):0.15, (46, 47, 48, 49, 50):0.10,
        (51, 52, 53, 54, 55):0.075, (56, 57, 58, 59, 60):0.05, (61, 62, 63, 64,
        65, 66):0.025}
    
    for age in aldurstengd_ororka.keys():
        if isinstance(age, [tuple, list]):
           for item in age:
               if ororkualdur == item:
                   baetur = baetur + ororkulifeyrir * aldurstengd_ororka[age]
        else:
            baetur = baetur + ororkulifeyrir * aldurstengd_ororka[age]
    

    【讨论】:

      【解决方案3】:

      我不想这么说,但是 sihrc 和 piokuc 都是错误的。

      你有一本格式如下的字典:

      d = { (1,2,3) : "a",
            (4) : "b"
          }
      

      第一个键 (1,2,3) 是一个包含 3 个整数的元组。第二个键 (4) 只是一个值为 4 的整数,不是一个元组。元组的定义特征是逗号分隔值,而不是大括号,因此a = 1,2,3 创建一个元组,并将其分配给a

      在元组周围使用大括号的主要目的是使代码看起来更简洁并简化一些边缘情况,例如单项元组。

      要将 4 转换为单个项目元组,您需要做一些稍微奇怪的事情,在值后添加一个尾随逗号,即(4,)

      如果您对字典中的所有单个项目键执行此操作,您应该会发现它工作正常。

      【讨论】:

        【解决方案4】:

        如果aldurstengd_ororka 是一个字典,那么这个表达式:

        aldurstengd_ororka([age])
        

        是一个错误。也许您的意思是:

        aldurstengd_ororka[(age)]
        

        编辑:你看到的错误很有趣,我确实用这个 sn-p 重现了它:

        for age in aldurstengd_ororka.keys():
            print 'age:', age 
            for item in age:
                print item
        

        代码的输出是:

        age: (32, 33)
        32
        33
        age: (36, 37)
        36
        37
        age: (51, 52, 53, 54, 55)
        51
        52
        53
        54
        55
        age: (61, 62, 63, 64, 65, 66)
        61
        62
        63
        64
        65
        66
        age: (30, 31)
        30
        31
        age: 25
        ---------------------------------------------------------------------------
        TypeError                                 Traceback (most recent call last)
        
        /home/ma/mak/Documents/t.py in <module>()
              3 for age in aldurstengd_ororka.keys():
              4     print 'age:', age
        ----> 5     for item in age:
              6         print item
              7 
        
        TypeError: 'int' object is not iterable
        

        所以,当 Python 将一个包含 1 个元素的元组分配给 age 变量时,会发生什么情况。所以年龄而不是(25),正如你所料,只是25...有点奇怪。一种解决方法是:

        for age in aldurstengd_ororka.keys():
            # if not tuple, make it a tuple:
            if not type(age) == type( (0,1) ): age = (age,)
            print 'age:', age 
            for item in age:
                print item
        

        【讨论】:

        • 也为我工作..(!)在提交我自己的(有些不同的)问题之前发现了这个。
        猜你喜欢
        • 2012-06-21
        • 1970-01-01
        • 2017-09-11
        • 2015-04-14
        • 1970-01-01
        • 1970-01-01
        • 2022-07-01
        相关资源
        最近更新 更多