Найти строки, начинающиеся с той же строки, и сохранить последнее вхождение - PullRequest
1 голос
/ 23 июля 2011

У меня есть эти данные:

E 71484666NC 1201011060240260 387802-1227810  1022    25   0   5   2   313D 0 1G5
E 71484666NC 1201011060240263 387902-1227910  1300    10   0   2   1   300D 0 1A5
E 10115693AK 1201011060617450 658160-1517007   021 10  0 896  71   4   131L 2 AA2
E 10310002PR 0201011060102315 191509 -664820 39726  5  5 935  50  46 21282D 5 0hn

Мне нужно найти строки, начинающиеся с первых 12 символов. Если есть кратные, мне нужно удалить предыдущие вхождения и оставить только последнее. Так и должно быть так:

E 71484666NC 1201011060240263 387902-1227910  1300    10   0   2   1   300D 0 1A5
E 10115693AK 1201011060617450 658160-1517007   021 10  0 896  71   4   131L 2 AA2
E 10310002PR 0201011060102315 191509 -664820 39726  5  5 935  50  46 21282D 5 0hn

Примечание: в большинстве случаев символы после первых 12 не совпадают ... Так что проверка дублирующих строк не возможна.

Примечание: нужно сохранить порядок.

Ответы [ 3 ]

4 голосов
/ 23 июля 2011
from collections import OrderedDict

lines = OrderedDict()
for line in file:
    lines[line[0:12]] = line

Это сохранит порядок строк при удалении дубликатов.

Редактировать: Эта версия OrderedDict работает на Python 2.4, 2.5 и 2.6.

1 голос
/ 23 июля 2011
from collections import OrderedDict

mydata = """E 71484666NC 1201011060240260 387802-1227810  1022    25   0   5   2   313D 0 1G5
E 71484666NC 1201011060240263 387902-1227910  1300    10   0   2   1   300D 0 1A5
E 10115693AK 1201011060617450 658160-1517007   021 10  0 896  71   4   131L 2 AA2
E 10310002PR 0201011060102315 191509 -664820 39726  5  5 935  50  46 21282D 5 0hn"""

datalines = mydata.split('\n')
uniques = OrderedDict((x[:12],x[12:]) for x in datalines)
final = [x+y for x,y in uniques.items()]

for x in final:
  print x

Это производит:

E 71484666NC 1201011060240263 387902-1227910  1300    10   0   2   1   300D 0 1A5
E 10115693AK 1201011060617450 658160-1517007   021 10  0 896  71   4   131L 2 AA2
E 10310002PR 0201011060102315 191509 -664820 39726  5  5 935  50  46 21282D 5 0hn
0 голосов
/ 23 июля 2011

Используйте словарь, взяв в качестве ключа первые 12 символов:

mydict = {}
for line in file:
    key = line[:12]
    value = line
    mydict[key] = line

, это автоматически переопределит все предыдущие записи.

...