Python抛出ValueError:不在列表中,尽管它在列表中

时间:2019-01-23 09:35:45

标签: python

我正在通过在Python中导入CSV文件来填充元组。现在,当我尝试在该元组中获取值的索引时,尽管存在该值,但它会给出Value error: is not in list。下面是我正在使用的代码以及示例数据。 以下是csv的内容

IsNonPO,ApprovedState,ApprovalRecords/0/Comment,ApprovalRecords/0/Comment.Date

我正在使用以下代码

import csv
flist = [tuple(row) for row in csv.reader(open('D:\\result_IV.csv', 'rU'))]
print (flist)
x = flist.index('IsNonPO')
print(x)

下面是我得到的输出

 [('IsNonPO', 'ApprovedState', 'ApprovalRecords/0/Comment','ApprovalRecords/0/Comment.Date']
File "C:/Users/abc/PycharmProjects/Default/first.py", line 10, in <module>
 x = flist.index('IsNonPO')
ValueError: 'IsNonPO' is not in list

2 个答案:

答案 0 :(得分:3)

这里的问题是,您正在分析元组中的CSV内容,然后将该元组存储在列表中。

    flist = [('IsNonPO', 'ApprovedState', 'ApprovalRecords/0/Comment','ApprovalRecords/0/Comment.Date')]

要访问第一行,请使用flist [0]

然后使用元组获取值的索引:

    flist[0].index('IsNonPO')

只需将第10行更改为:

    x = flist[0].index('IsNonPO')

答案 1 :(得分:0)

您不遵循数据结构。

根据您的代码,得到的是元组列表。每个元组代表一行,每个元组项代表csv中的值。

所以

IsNonPO,ApprovedState,ApprovalRecords/0/Comment,ApprovalRecords/0/Comment.Date

你应该得到

[('IsNonPO', 'ApprovedState', 'ApprovalRecords/0/Comment','ApprovalRecords/0/Comment.Date')]

(请注意,)结束后缺少]

所以确实,列表不包含给定的字符串,而是包含给定字符串的元组。

一种方法可能是

n, val = next((n, i) for n, i in enumerate(flist) if 'IsNonPO' in i)

为您提供包含'IsNonPO'的第一项(和元组)。

然后,您可以继续在该元组中获取'IsNonPO'的索引。

当然,这取决于您真正想要实现的目标。如果您总是只有一行,那么yashjain12yj's answer也可以。