值错误无法索引

Value Error cannot index

text_file = ['Cats','Dogs','Frogs','(pass)', 'ants']
final_l = [[1], [2], [3], [5]]
final_dict = {'Dogs': [1], 'Cats': [1], 'Frogs': [1], 'ants': [1]}

for k, v in final_dict.items():
    for sl in final_l:
        for num in sl:
            if text_file[int(num)] == k:
                sl.append(k)
                sl.append(v)
print(final_l)

Traceback (most recent call last):
  File "/Users/Luan/Desktop/1.py", line 9, in <module>
    if text_file[int(num)] == k:
ValueError: invalid literal for int() with base 10: 'Frogs'

好迷茫。哪里出错了???为什么它一直给我这个值错误?为什么我不能索引? 我想这样说:

final_l = [[1, "Cats", [1]], [2, "Dogs", [1]], [3, "Frogs", [1]], [5, "ants", [1]]]

导致错误的原因是 text_file 是一个列表,您必须将整数传递给该列表的引用和索引。您传递的 num 正在迭代一个列表,该列表在您对其进行操作时正在更改。当您将 'Frongs' 和“[1]”附加到列表时,num 会迭代这些值,然后您尝试引用 text_file 的索引 'Frogs'。这会导致值错误。

您可以使用:

import copy
for num in copy.copy(sl):

作为一种可能的解决方案,尽管我对你的最终 objective 是什么感到很困惑。

这里的主要问题是您在遍历列表的同时向其附加新值,这会导致您出错,并且因为您碰巧使用了附加到此列表的值 sl 但这是不正确的用于索引(如 'Frogs'),所以我的明显建议是为此创建一个新列表:

>>> new = []
>>> for k,v in final_dict.items():
    for i,sl in enumerate(final_l):
        for num in sl:
            if text_file[num-1] == k:
                new.append(sl+[k,v])


>>> new
[[3, 'Frogs', [1]], [5, 'ants', [1]], [2, 'Dogs', [1]], [1, 'Cats', [1]]]

请注意,列表索引从 0 开始。