Найти строки, начинающиеся с той же строки и сохранить последнее происхождение
-
22-10-2019 - |
Вопрос
У меня есть эти данные:
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
Это автоматически переопределяет все предыдущие записи.
Не связан с StackOverflow