值错误无法索引

时间:2016-04-14 17:54:36

标签: python int literals base

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]]]

2 个答案:

答案 0 :(得分:0)

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

您可以使用:

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

作为一种可能的解决方案,尽管我对你的最终目标感到困惑。

答案 1 :(得分:0)

这里的主要问题是你在迭代列表的同时追加新的值会导致你的错误,而且你碰巧使用你追加到这个列表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开始。