删除重复项的解决方案?

时间:2011-05-25 16:11:11

标签: python

我的代码如下。基本上,我有一个CSV文件和一个文本文件" input.txt"。我试图创建一个Python应用程序,它将接受来自" input.txt"的输入。并在CSV文件中搜索匹配项,如果找到匹配项,则应返回CSV文件的第一列。

import csv
csv_file = csv.reader(open('some_csv_file.csv', 'r'), delimiter = ",")
header = csv_file.next()
data = list(csv_file)

input_file = open("input.txt", "r")
lines = input_file.readlines()
for row in lines:
    inputs = row.strip().split(" ")
    for input in inputs:
        input = input.lower()
        for row in data:
            if any(input in terms.lower() for terms in row):
                print row[0]

说我的CSV文件如下所示:

 book title, author 
 The Rock, Herry Putter
 Business Economics, Herry Putter    
 Yogurt, Daniel Putter
 Short Story, Rick Pan

并说我的input.txt看起来像这样:

 Herry
 Putter

因此,当我运行我的程序时,它会打印:

 The Rock
 Business Economics
 The Rock
 Business Economics
 Yogurt

这是因为它搜索所有标题" Herry"首先,然后再次搜索"推杆"。所以最后,我有书名的重复。我试图想办法删除它们......所以,如果有人可以提供帮助,那将非常感激。

4 个答案:

答案 0 :(得分:4)

如果原始订单无关紧要,请先将结果粘贴到一个集合中,然后在结尾处将其打印出来。但是,你的例子足够小,速度无关紧要。

答案 1 :(得分:3)

将结果粘贴在一个集合中(类似于列表但只包含唯一元素),并在最后打印。

喜欢的东西;

if any(input in terms.lower() for terms in row):
    if not row[0] in my_set:
        my_set.add(row[0])

答案 2 :(得分:2)

在搜索结果中将结果放入列表中,并且在首次搜索列表以查看结果是否已存在之后,仅将新结果添加到列表中。然后在搜索完成后打印列表。

答案 3 :(得分:1)

首先,在单个列表中获取您要查找的搜索词集。我们在此处使用set(...)来消除重复的搜索字词:

search_terms = set(open("input.txt", "r").read().lower().split())

接下来,迭代数据表中的行,选择与搜索项匹配的每一行。在这里,我保留了原始代码的行为,因为我们在每行的任何列中搜索大小写标准化的搜索词。如果您只想搜索,例如作者专栏,然后需要调整:

results = [row for row in data
              if any(search_term in item.lower()
                     for item in row
                     for search_term in search_terms)]

最后,打印结果。

for row in results:
    print row[0]

如果您愿意,还可以列出作者或表格中的任何其他信息。 E.g:

for row in results:
    print '%30s (by %s)' % (row[0], row[1])