Python:列表索引必须是整数,而不是str?

时间:2015-08-06 21:47:17

标签: python list csv

所以我的代码看起来像这样:

with open(completeCSV, 'r') as csvfile:
    test = csv.reader(csvfile, delimiter=';')
    for line in test:
        print(line)
        i = i + 1  # on the first line, i will equal 1
        count = line[0]
        if count == '1':
            for prof in proflist:  # vertex1=prof
                if line[1].lower() == proflist[prof]:
                    # if vertex1 is a professor, you want to keep the edge.
                    lines_to_keep.append(i)
                    break  # breaks and doesn't check the rest of profs

它基本上读取CSV,并检查来自csv的值是否等于列表proflist中的另一个值。

我收到了这个错误:

  

追踪(最近一次通话):     文件“C:/Users/sskadamb/PycharmProjects/BetterDelimiter/filter.py”,第50行,in       如果行[1] .lower()== proflist [prof]:   TypeError:list indices必须是整数,而不是str

是因为proflist[prof]?但我想查看所有的条目 proflist针对line[1]。我该怎么做,我做错了什么?我可以不迭代这样的列表吗?

3 个答案:

答案 0 :(得分:5)

profproflist的元素,而不是索引。

替代

if line[1].lower()==proflist[prof]:

if line[1].lower() == prof:

答案 1 :(得分:3)

for prof in proflist:  #vertex1=prof
        if line[1].lower()==proflist[prof]:

Prof是一个迭代器,无需再次从列表中访问它!

if line[1].lower() == prof:

我认为你的意图是什么。

答案 2 :(得分:2)

@mevius所说的似乎是真的 - prof是一个字符串,但忽略了这一点:

for prof in proflist:  #vertex1=prof
        if line[1].lower()==proflist[prof]:

该代码有点疯狂:您已经使用proflist通过for进行迭代,以便列表中的每个条目都被分配到循环中的prof

所以我认为你只想:

for prof in proflist:  #vertex1=prof
        if line[1].lower()==prof:

prof作为字符串是正确的,并且实际上在任何地方都不需要int(prof)