所以我的代码看起来像这样:
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]
。我该怎么做,我做错了什么?我可以不迭代这样的列表吗?
答案 0 :(得分:5)
prof
是proflist
的元素,而不是索引。
替代
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)
。