[英]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.