You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何解决‘int’ object is not iterable错误?附报错代码

解决'int' object is not iterable错误的方案

嘿,我来帮你搞定这个问题!先拆解下错误根源,再给你几个实用的解决方案~

为什么会触发这个错误?

你的列表a整数和列表交替出现的结构:[0, [(1,2,3),(1,2,3)], 1, [(4,5,6),(4,5,6)], ...]。但你用dict((i,li) for i,li in a)时,Python会尝试把列表里的每个元素拆成两个值(也就是ili)。

问题出在整数元素上:整数是不可迭代的,没法拆成两个元素,所以直接抛出了'int' object is not iterable的错误。

解决方案

因为你的数据是“键-值”成对出现的,我们只需要两两分组处理这个列表就行,这里有几种简单的实现方式:

方法1:切片+zip配对(最简洁)

a = [0, [(1,2,3),(1,2,3)], 1, [(4,5,6),(4,5,6)], 2, [(7,8,9),(7,8,9)]]
d = dict(zip(a[::2], a[1::2]))
print(d)
  • a[::2]:取列表中所有偶数索引的元素(也就是0、1、2这些键)
  • a[1::2]:取列表中所有奇数索引的元素(对应的列表值)
  • zip()会把这两组元素一一配对,最后直接转成字典即可。

方法2:手动循环遍历(最直观)

如果你想更清晰地控制每一步逻辑,可以用循环手动处理:

a = [0, [(1,2,3),(1,2,3)], 1, [(4,5,6),(4,5,6)], 2, [(7,8,9),(7,8,9)]]
d = {}
# 从索引0开始,每次步长加2,遍历所有键的位置
for i in range(0, len(a), 2):
    key = a[i]
    value = a[i+1]
    d[key] = value
print(d)

方法3:迭代器生成键值对

这种方法利用迭代器的特性,每次取两个元素组成键值对:

a = [0, [(1,2,3),(1,2,3)], 1, [(4,5,6),(4,5,6)], 2, [(7,8,9),(7,8,9)]]
it = iter(a)
# 生成器表达式每次取两个元素作为键值对
d = dict((next(it), next(it)) for _ in range(len(a)//2))
print(d)

运行结果

不管用哪种方法,最终输出的字典都是:

{0: [(1, 2, 3), (1, 2, 3)], 1: [(4, 5, 6), (4, 5, 6)], 2: [(7, 8, 9), (7, 8, 9)]}

内容的提问来源于stack exchange,提问作者Sahil Grover

火山引擎 最新活动