2012-03-01 4 views
1

У меня есть большой файл с записями, как был открыт в питона, как:Удалить дубликаты записей в списке с помощью питона

fh_in=open('/xzy/abc', 'r') 
parsed_in=csv.reader(fh_in, delimiter=',') 
for element in parsed_in: 
    print(element) 

РЕЗУЛЬТАТ:

[ 'ABC', 'CHR9', '3468582', ' NAME1' , 'УЗА', 'GGU']

[ 'DEF', 'CHR9', '14855289', NAME19' , 'UCG', 'GUC']

[, «CHR9 'ТТС' ',' 793946 ',' NAME178 ',' CAG ',' GUC ']

[ 'ABC', 'CHR9', '3468582', 'NAME272', 'ВСТ', 'ГПА']

Я должен извлекать только уникальные записи и удаления записей с одинаковыми значениями в col1, col2 и col3. Как и в этом случае, последняя строка аналогична строке 1 на основе col1, col2 и col3.

Я попробовал два метода, но не удался:

Метод 1:

outlist=[] 

for element in parsed_in:  
    if element[0:3] not in outlist[0:3]: 
    outlist.append(element) 

Метод 2:

outlist=[] 
parsed_list=list(parsed_in) 
for element in range(0,len(parsed_list)): 
    if parsed_list[element] not in parsed_list[element+1:]: 
    outlist.append(parsed_list[element]) 

Эти и возвращает все записи, а не уникальные записи на основе первые 3 столбца.

Просьба предложить мне способ сделать это

AK

+3

Возможный дубликат [Как удалить дубликаты из списка в Python?] (Http://stackoverflow.com/questions/479897/how-do-you-remove-duplicates-from-a-list-in- python) – kennytm

+0

Не дубликат, поскольку его список уникален на основе только части данных, а не всего набора данных. – MitMaro

ответ

2

Вы, вероятно, хотите использовать O (1) поиск, чтобы сохранить себя полную проверку элементов при добавлении, и как сказал Caol Acain, устанавливает это хороший способ сделать это.

Что вы хотите сделать что-то вроде:

outlist=[] 
added_keys = set() 

for row in parsed_in: 
    # We use tuples because they are hashable 
    lookup = tuple(row[:3])  
    if lookup not in added_keys: 
     outlist.append(row) 
     added_keys.add(lookup) 

Вы можете поочередно использовали словарь, отображающий ключ к строке, но это будет иметь предостережение, что вы бы не сохранить порядок ввода , поэтому наличие списка и набора ключей позволяет сохранить порядок в файле.

+0

Первый хороший ответ, намного лучше, чем тот, который я собирался опубликовать. +1 – MitMaro

0

Преобразование списков для наборов!

http://docs.python.org/tutorial/datastructures.html#sets

+0

Я тоже думал об этом, но если вы прочтете проблему ближе, вы увидите, что наборы не будут работать. Каждый элемент в списке уникален только для первых трех элементов в списках. – MitMaro

Смежные вопросы