在Python中两个列表之间匹配值?

问题描述

对于使用哪种逻辑将列表与包含值的CSV文件/列表进行匹配,我有些困惑。我有一个想法,可以使用for循环来简单地遍历CSV并进行匹配:

for j in range(len(data)): 
    if STR_list[j] in data[j]: 
        print(data[j])

但是,这实际上并没有打印出我想要的匹配项。这是打印时data和STR_list值的样子(在上述for循环之前):

print(STR_list):
['AGATC','4','AATG','1','TATC','5']  

print(data)
[OrderedDict([('name','Alice'),('AGATC','2'),('AATG','8'),('TATC','3')]),OrderedDict([('name','Bob'),'4'),'1'),'5')]),'Charlie'),'3'),'5')])]

因此,在这种情况下,带有“ Bob”的行将是匹配项,因为这些值会对齐。我应该为此使用正则表达式,还是我认为可以使用for循环是正确的?

编辑:这是我打开CSV的方式(毕竟它似乎是列表吗?)

with open('file.csv') as csvfile:
reader = csv.DictReader(csvfile)
data = list(reader)

解决方法

if STR_list[j] in data[j]: 

此行应被制表,以位于for循环内。假设这是复制/粘贴错误:

STR_list [j]不会查看整个STR_list,而只是查看其中的第j个项目(因此,当您查看data [0]时,您正在查看的是'AGATC',而您查看的是数据[ 1]您正在查看“ 4”等。

您想要的是查找所有STR_list,并查看它是否在每次检查数据的第二,第三和第四位置。

此外,STR_list的格式需要与数据相同,因此您需要在那里有一个元组列表(或者是OrderedDict,我不熟悉该数据类型,所以我不知道这是否就是全部)组成数据。)

真的,您要查找的内容等同于:

如果OrderedDict([('name','Alice')的子集中的[['AGATC','2'),('AATG','8'),('TATC','3')] ),('AGATC','2'),('AATG','8'),('TATC','3')])

我意识到我没有完全为您提供所需的代码,但是我希望我能对它进行解释,以便您自己理解和理解它。

,
var win = window.open(url,'_blank');

基本上,您需要学习如何比较两个列表以及如何从列表中选择特定元素