2013-06-05 31 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'它不按升序对它们进行排序 –