【问题标题】:Python: list indices must be integers, not str?Python:列表索引必须是整数,而不是 str?
【发布时间】:2015-08-06 21:47:16
【问题描述】:

所以我的代码如下所示:

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 中的另一个值。

我收到此错误:

Traceback(最近一次调用最后一次): 文件“C:/Users/sskadamb/PycharmProjects/BetterDelimiter/filter.py”,第 50 行,在 如果 line[1].lower()==proflist[prof]: TypeError: 列表索引必须是整数,而不是 str

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

【问题讨论】:

  • profproflist 的元素,而不是索引
  • 我明白了.. 谢谢。那我可以if line[1]==prof吗?

标签: python list csv


【解决方案1】:

profproflist 的元素,而不是索引。

替换

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

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

【讨论】:

  • 感谢您的回答!将在 8 分钟内接受... :)
【解决方案2】:
for prof in proflist:  #vertex1=prof
        if line[1].lower()==proflist[prof]:

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

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

我认为你的本意是这样。

【讨论】:

    【解决方案3】:

    @mevius 所说的似乎是真的——prof 是一个字符串,但没有抓住重点:

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

    该代码有点疯狂:您已经使用for 遍历proflist,以便将列表中的每个条目分配给循环中的prof

    所以我认为你想要的只是:

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

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

    【讨论】:

      猜你喜欢
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 2016-02-09
      • 2015-05-03
      • 2020-09-06
      相关资源
      最近更新 更多