如何解决‘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会尝试把列表里的每个元素拆成两个值(也就是i和li)。
问题出在整数元素上:整数是不可迭代的,没法拆成两个元素,所以直接抛出了'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




