繁体   English   中英

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

[英]Matching values between two lists in Python?

我对使用什么逻辑能够将列表与包含值的 CSV 文件/列表进行匹配感到有些困惑。 我有一个想法,使用 for 循环简单地遍历 CSV 并匹配它:

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

但这实际上并没有像我想要的那样打印出匹配。 这是打印时数据和 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'), ('AGATC', '4'), ('AATG', '1'), ('TATC', '5')]), OrderedDict([('name', 'Charlie'), ('AGATC', '3'), ('AATG', '2'), ('TATC', '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 个项目(因此,当您查看数据 [0] 时,您正在查看“AGATC”,当您查看数据 [1] 时,您'正在看'4'等)。

您想要的是查找所有 STR_list 并查看它是否在每次检查数据的第 2、第 3 和第 4 position 中。

此外, STR_list 需要以与数据相同的方式进行格式化,因此您需要一个元组列表(或 OrderedDict,我不熟悉该数据类型,所以我不知道这是否完全是构成数据的原因)。

实际上,您要查找的内容相当于:

if [('AGATC', '2'), ('AATG', '8'), ('TATC', '3')] 在 OrderedDict([('name', 'Alice'), ( 'AGATC', '2'), ('AATG', '8'), ('TATC', '3')])

我意识到我并没有准确地给你你需要的代码,但我希望我正在解释它,以便你自己理解和弄清楚。

for j in range(len(data)):
    #we flatten the OrderedDict into a list
    flattened_data = [x for item in data[j].items() for x in item]
    #Now we verify that the list STR_list and the list flattened_data (minus the 2 first element, aka "name" and the actual name) are equal
    if sum([1 for x1, x2 in zip(STR_list, flattened_data[2:]) if x1 == x2])==len(STR_list):
       #Now we print the name of the person which is at index 1 inside the new list
       print(flattened_data[1])
    
 

基本上你需要学习如何比较两个列表以及如何 select 列表中的特定元素

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM