вы можете использовать метод .split(',')
, чтобы разделить линию на отдельные ее части, затем используйте int()
, чтобы преобразовать оценку в число. Метод .sort()
сортирует список на месте, а key
сообщает, что нужно сортировать.
scores = []
with open("scores.txt") as f:
for line in f:
name, score = line.split(',')
score = int(score)
scores.append((name, score))
scores.sort(key=lambda s: s[1])
for name, score in scores:
print(name, score)
Это даст вам список кортежей, содержащих (имя, оценка) пар в отсортированном виде. Если вы хотите распечатать их с запятой между ними (чтобы держать его в соответствии) изменить шрифт, чтобы print(name, score, sep=', ')
чтение входного файла также может быть выражено в виде одной (большой) линии
with open("scores.txt") as f:
scores = [(name, int(score)) for name, score in (line.split(',') for line in f)]
краткое объяснение key=
:
функция лямбда является анонимная функция, то есть функция без имени. Обычно вы используете их, когда вам нужна функция только для небольшой операции. .sort
имеет необязательный аргумент ключевого слова key
, который принимает функцию и использует возврат этой функции при сортировке объектов.
Так что lambda
также может быть записана в виде
def ret_score(pair):
return pair[1]
И вы могли бы написать .sort(key=ret_score)
, но так как мы действительно не нужна эта функция для чего-то еще, его не надо объявить. Синтаксис лямбда
lambda <arguments> : <return value>
Таким образом, эта лямбда принимает пару и возвращает второй элемент в ней. Вы можете сохранить lambda
и использовать его как обычную функцию, если хотите.
>>> square = lambda x: x**2 # takes x, returns x squared
>>> square(3)
9
>>> square(6)
36
Есть ли способ сделать это так, в распечатывает Вертикально? Как- John 3 Bobba 4 Luke 6 Matthew 13 – user2365677
@ user2365677 да я просто добавил, что –
Просто ради информации,».sort (key = lambda s: s [1]) « Я знаю, что .sort, что означает лямбда? Он действительно работает, его то, что я хотел и спасибо :) – user2365677