【发布时间】:2020-08-13 14:32:46
【问题描述】:
我对使用什么逻辑能够将列表与包含值的 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)
【问题讨论】:
-
预期的输出应该是什么?你能给我们展示一下吗?
-
我认为我的代码(for-loop)写得很糟糕,因为它的预期用途。它应该匹配 'name', 'Bob' 之后的字符串,所以最终我想在这个例子中得到名字 'Bob' 因为他将是正确的匹配项(如果这有意义的话)。
-
我认为最好的方法是用预期的输出更新你的 OP
-
一次遍历两个搜索词列表。第一个是名称,第二个是值。在 target 中查找元组 (name, value),其中 target 是 data 中的一个条目。
-
顺便说一句,我有一个基于 collections.namedtuple 的查找字典的工作解决方案,尽管为每个字段使用 defaultdict(set) 会更好。
标签: python list csv format match