2

我有一个像这样的文件:

q12j4
q12j4
fj45j
q12j4
fjmep
fj45j

现在我想做的是:

  • 查找是否有重复的条目,
  • 如果是这样,则打印一次条目,并且不会重复打印它们。
    输出应该是这样的:

    q12j4  
    fj45j  
    fjmep  
    

    [省略重复]

我试图用defaultdict函数来做,但我认为它不适用于字符串。
请帮忙..

4

4 回答 4

3
def unique(seq):
    seen = set()
    for val in seq:
        if val not in seen:
            seen.add(val)
            yield val

with open('file.txt') as f:
    print ''.join(unique(f))

如您所见,我选择编写一个单独的生成器来从可迭代对象中删除重复项。这个生成器,unique()也可以在许多其他情况下使用。

于 2012-05-15T12:46:26.233 回答
3

这应该足够了:

with open('file.txt', 'r') as f:
    for line in set(f):
        print line
于 2012-05-15T12:49:22.920 回答
2
seen = set()
with open(filename, 'r') as f:
    for line in f:
        if line not in seen:
            print line
            seen.add(line)
于 2012-05-15T12:45:54.243 回答
0

您应该使用 itertools.groupby 函数,有关用法示例,请查看标准库或此相关问题:如何使用 Python 的 itertools.groupby()?

假设这toorder是您的重复条目列表:

import itertools
toorder = ["a", "a", "b", "a", "b", "c"]

for key, group in itertools.groupby(sorted(toorder)):
    print key

应该输出:

a
b
c
于 2012-05-15T12:43:46.897 回答