Найти строки, начинающиеся с той же строки и сохранить последнее происхождение

StackOverflow https://stackoverflow.com/questions/6800154

Вопрос

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

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 не совпадают ... поэтому проверка дубликатов не является вариантом.

Примечание: необходимо сохранить заказ.

Это было полезно?

Решение

from collections import OrderedDict

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top