2013-06-05 28 views
2

我有以下函數構建用於對行進行排序,然後每行將行中的內容排序爲數字值。Python程序刪除行中的重複條目

線路是這樣的:

67:1 45:1 67:1 89:1 
31:1 89:5 45:1 23:1 

代碼:

with open("SVM/svm-pos-train.txt") as f, open("SVM/svm-pos-train2.txt", 'w') as out: 
       for line in f: 
        line = line.split() 
        line.sort(key = lambda x: int(x.split(':')[0])) 
        out.write(" ".join(line) + '\n') 

如何修改這個讓也從當前行刪除重複的,就像這樣:

45:1 67:1 89:1 
23:1 31:1 45:1 89:1 

我一直在搜索和試用/(很多)錯誤,但沒有運氣。

+0

應67:1和67:2被認爲是一樣的嗎? – oleg

+0

@oleg是的,我應該想到 –

+0

在這種情況下'''set(line.split())'''將不起作用 – oleg

回答

7

使用set

line = line.split() 
line = list(set(line)) 

set返回的獨特元素的未有序集合,然後將其轉換回列表,然後對列表進行排序。

編輯:

line = line.split() 
line = list(set(line)) 
out.write(" ".join(sorted(line, x: (int(x.split(':')[0]), int(x.split(':')[1])))) + '\n') 
+0

我會添加一個'sorted()'到那個(字典順序應該沒問題)。 – voithos

+1

我會添加'''.join(排序(行))' – oleg

+0

@voithos感謝提到它!更新我的回答 –

1

希望這是有幫助的:

#!/usr/bin/python 

with open("d1.txt") as f, open("d2.txt", 'w') as out: 
    for line in f: 
     fields = line.split() 
     set_ = set(fields) 
     list_ = list(set_) 
     list_.sort() 
     out.write(" ".join(list_) + '\n') 
+0

你:('1610:1 1662:1 1797:1 1948:1 2561:1 3238:1 4295:1 4518:1 848:1 894:1'它不按升序對它們進行排序 –