Алфавитная сортировка ключей с их соответствующими значениями

У меня есть текстовый файл имен и значений, например:

Sam:3 
Ben:6
Ben:5
Alice:7

Я попытался «распечатать» его из файла в алфавитном порядке, но мне также нужно избавиться от дубликатов и показать только лучший результат каждого имени. Я начал, но это, кажется, не работает. Я использую питон 3.4.1.

AClass1=open("Class1.txt") 
line=AClass1.readlines() 
for lines in line: 
    key=lines.split(":")[0] 
    val=lines.split(":")[1] 
    for names in sorted(key): 
        print(names,":",val) 
        AClass1.close()

person Gerard Way    schedule 01.07.2015    source источник
comment
Было бы более интуитивно называть результат readlines() строк и одного элемента строки, а не наоборот, как это делается в вашем коде.   -  person mkrieger1    schedule 01.07.2015


Ответы (2)


Моя версия будет (при условии, что каждая запись находится на новой строке):

d = {}
with open('file.txt') as f:
  for line in f.readlines():
    k, v = line.strip().split(":")
    if (k not in d) or d[k] < int(v):
      d[k] = int(v)

Затем вы можете выполнить итерацию с помощью sorted(d.keys).

person Eriks Dobelis    schedule 01.07.2015
comment
Как бы вы «напечатали» его, чтобы значение оставалось с правильным ключом? Пока ключ все еще алфавитный? - person Gerard Way; 01.07.2015
comment
См. stackoverflow.com/questions/1479649/ для нескольких решений - person Eriks Dobelis; 01.07.2015

Вы можете использовать словарь (и метод dict.setdefault), чтобы сохраните свои имена и баллы, а затем напечатайте максимальный балл для каждого имени:

d={}
with open("Class1.txt") as f :

   for line in f:
      for i,j in [t.split(':') for t in line.split()]:
        d.setdefault(i,[]).append(int(j))

for i,j in d.iteritems():
   print '{}:{}'.format(i,max(j))

Обратите внимание: если ваши оценки могут быть плавающими, вам нужно использовать float вместо int в методе append.

person kasravnd    schedule 01.07.2015
comment
@VigneshKalai Как вы сказали, он возвращает значение, а значение здесь представляет собой список, поэтому вы можете добавить к нему все, что хотите! ;) - person kasravnd; 01.07.2015