Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:若在中,则匹配在中找到的行的字段_Python_List_If Statement - Fatal编程技术网

Python:若在中,则匹配在中找到的行的字段

Python:若在中,则匹配在中找到的行的字段,python,list,if-statement,Python,List,If Statement,标题可能有点让人困惑,但我想知道是否有一种方法可以让我们“if-in”在匹配后查看数组中的其他字段。我想如果没有内置的东西,我只需要手动完成,而不是使用is-in 无论如何,我的代码如下所示: csv = csv.reader(response) query = con.fetchall() for row in query: if row[1] in csv: do some stuff else: do some other stuff 有没有

标题可能有点让人困惑,但我想知道是否有一种方法可以让我们“if-in”在匹配后查看数组中的其他字段。我想如果没有内置的东西,我只需要手动完成,而不是使用is-in

无论如何,我的代码如下所示:

csv = csv.reader(response)
query = con.fetchall()

for row in query:
    if row[1] in csv:
       do some stuff
    else:
       do some other stuff
有没有办法让第一个if基本上是“如果csv中的行[1]和匹配的csv[4]==TRUE:做一些事情”

基本上就像两阶段匹配,如果它存在,如果其中一个字段等于其他字段


任何帮助都将不胜感激

您首先需要加载完整的csv,目前您只需对其进行迭代。另外,您要做的似乎是在csv行中的某个位置查找第[1]行,您的代码当前正在查找与第[1]行匹配的完整csv行,我怀疑该行是否正确。这是我对你所问问题的回答

rows = list(reader(response))
query = con.fetchall() # this one you can iterate through, I am just copying what you had
for row in query:
    rs = filter(lambda r: row[1] in r, rows)
    for r in rs:
        if r[4]:
            pass # do some stuff (here)
            break
    else: # this is a for ... else loop
        pass # do some other stuff

我再一次对你的实际问题做了很多假设。。。如果你澄清你的问题,我也许能找到一个更有效的解决方案。

如果你只使用csv中的
如果行[1]和csv[4]==True,那有什么错呢
我想他可能是指csv中的
如果行[1]和行[1]==csv[4]:
,也许?如果csv阅读器对象支持
和切片,我会非常惊讶。所有序列都是可iterable,但并非所有可iterable都是序列。如果您想随机访问csv数据,您需要首先将整个内容读入内存。csv读取器返回一个iterable,但您需要的是将iterable展开到一个列表中,即
rows=list(reader(response))
。我们需要更多地了解csv行的外观,看起来您希望将行[1]与csv行中的任何列相匹配(这是否正确),如果是这样,您的代码需要更改很多。关于您正在做什么的更多详细信息将有助于了解。csv是一个从网页下载的文件,这是一个csv,我通过urllib2获取,然后使用csv.reader将其使用。基本上,首先我需要检查行[1]是否在CSV中,然后,如果找到它,我想检查CSV中找到它的元素,看看CSV[4]的值是多少。我认为最终的答案可能涉及对加载的CSV数据使用
索引
,而不是每次过滤它。取决于实际问题是什么。我最初使用index,然后意识到rows.index(row[1])无法匹配任何内容,因为rows是列表的列表,而row[1]将是某种文字(int,string…)。由于问题最初是编码的,索引看起来确实应该使用,但我怀疑它在这里是否可用。我想这可能行得通,我对Python有点陌生,但我会尝试一下。为了澄清,CSV是我通过urllib2从网站下载的CSV,我得到响应并使用CSV.reader()创建“CSV”变量。我在“查询”中有一个元组列表,这些元组是IP地址和一些其他信息。CSV中有一个IP地址列表和一个字段(CSV[4]),可以设置为True或False。我想在“查询”中遍历每个IP的CSV,如果匹配,则检查CSV的该元素以查看CSV[4]是否为真。像泥一样干净?这就是我最终要做的,或者类似的事情。我认为它最终应该对我有用,我只是有一些其他的逻辑需要解决。CSV中的ip地址是什么列?现在,这段代码针对每一行查看csv的每一列,如果您知道该列,则可以使其更加高效。