2015-02-03 7 views
-2

Я столкнулся с проблемой при попытке решить эту задачу, поэтому я здесь после неудачи несколько раз, мне было интересно, как я могу напечатать максимальное значение (оценка) для ключа (имя), когда ключ хранит многозначные значения такие как:Как напечатать только самое высокое значение для ключа?

Rob Scored: 3,5,6,2,8 
Martin Scored: 4,3,1,5,6,2 
Tom Scored: 7,2,8 

Имя, являющееся ключом, и его значения. Теперь я хочу, чтобы получить выход

Martin Scored: 6 
Rob Scored: 8 
Tom Scored: 8 

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

from collections import OrderedDict 
dictionary = {} 

for line in f: 
    firstpart, secondpart = line.strip().split(':') 
    dictionary[firstpart.strip()] = secondpart.strip() 
    columns = line.split(": ") 
    letters = columns[0] 
    numbers = columns[1].strip() 
    if d.get(letters): 
     d[letters].append(numbers) 
    else: 
     d[letters] = list(numbers) 
sorted_dict = OrderedDict(
sorted((key, list(sorted(vals, reverse=True))) 
     for key, vals in d.items())) 
print (sorted_dict) 
+1

Этот вопрос уже задан сегодня. Странно: D – nbro

+0

Как выглядит ваш входной файл? – skrrgwasme

+0

его txt-файл, и он выглядит как первый выделенный пример 'Rob Scored: ....' rob, являющийся ключом, и значениями являются значения –

ответ

0

Это делает то, что вы хотите:

# You don't need to use an OrderedDict if you only want to display in 
# sorted order once 
score_dict = {} # try using a more descriptive variable name 

with open('score_file.txt') as infile: 
    for line in infile: 
     name_field, scores = line.split(':') # split the line 
     name = name_field.split()[0]   # split the name field and keep 
              #  just the name 

     # grab all the scores, strip off whitespace, convert to int 
     scores = [int(score.strip()) for score in scores.split(',')] 

     # store name and scores in dictionary 
     score_dict[name] = scores 

     # if names can appear multiple times in the input file, 
     # use this instead of your current if statement: 
     # 
     # score_dict.setdefault(name, []).extend(scores) 

# now we sort the dictionary keys alphabetically and print the corresponding 
# values 
for name in sorted(score_dict.keys()): 
    print("{} Scored: {}".format(name, max(score_dict[name]))) 

Пожалуйста, дайте этот документ прочитанный: Code Like a Pythonista. В нем много предложений по написанию лучшего кода, и именно там я изучил метод dict.setdefault() для работы со словарями, где значения являются списками.

С другой стороны, в вашем вопросе вы указали на попытку использования функции max, но эта функция не указана в коде, который вы указали. Если вы ссылаетесь на неудачные попытки выполнить что-то в своем вопросе, вы должны включить также код с ошибкой, чтобы мы могли его отладить. Я смог дать вам код, который выполняет вашу задачу вместе с некоторыми другими предложениями, но я не могу отлаживать исходный код, если вы его не предоставляете. Поскольку это, очевидно, вопрос о домашнем задании, вы должны определенно потратить некоторое время на выяснение того, почему он не работал в первую очередь.