0

test.txt で:

1   a
2   b
3   c
4   a
5   d
6   c

重複を削除し、残りを test2.txt に保存したい:

2   b
5   d

以下のコードから始めてみました。

file1 = open('../test.txt').read().split('\n')
#file2 = open('../test2.txt', "w")
word = set()
for line in file1:
    if line:
        sline = line.split('\t')
        if sline[1] not in word:
            print sline[0], sline[1]              
            word.add(sline[1])
#file2.close()

コードの結果は次のとおりです。

1   a
2   b
3   c
5   d

なにか提案を?

4

4 に答える 4

3

You can use collections.Orderedict here:

>>> from collections import OrderedDict
with open('abc') as f:
    dic = OrderedDict()
    for line in f:
        v,k = line.split()
        dic.setdefault(k,[]).append(v)

Now dic looks like:

OrderedDict([('a', ['1', '4']), ('b', ['2']), ('c', ['3', '6']), ('d', ['5'])])

Now we only need those keys which contain only 1 items in the list.

for k,v in dic.iteritems():
    if len(v) == 1:          
        print v[0],k
...         
2 b
5 d
于 2013-07-10T13:36:17.627 に答える
1

あなたがしていることは、すべての項目 (文字) が 1 回だけ印刷されるようにすることです。これは明らかに、あなたが望んでいることではありません。

コードを 2 つの半分に分割する必要があります。文字数に関する統計の読み取りと収集、およびcount == 1.

元のコードの変換 (少し簡単にしました):

file1 = open('../test.txt')
words = {}
for line in file1:
    if line:
        line_num, letter = line.split('\t')
        if letter not in words:
            words[letter] = [1, line_num]
        else:
            words[letter][0] += 1

for letter, (count, line_num) in words.iteritems():
    if count == 1:
        print line_num, letter
于 2013-07-10T13:51:00.793 に答える
0

パンダはどうですか

import pandas as pd

a = pd.read_csv("test_remove_dupl.txt",sep=",")

b = a.drop_duplicates(cols="a")
于 2013-07-10T13:53:15.640 に答える