Было бы лучше, если бы вы имели более подходящий тип данных, чем строка для представления, скажем, имя человека и возраст. Одним из способов может быть словарь:
lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
d = dict(item.split(' ') for item in lists)
Это построение словаря из потока двухэлементных списков.
Тогда вы можете сортировать так:
print sorted((v, k) for k, v in d.iteritems())
и получить это:
>>> lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
>>> d = dict(item.split(' ') for item in lists)
>>> print sorted((v, k) for k, v in d.iteritems())
[('10', 'ben'), ('20', 'jack'), ('35', 'ollie'), ('50', 'alisdar')]
Или вы можете преобразовать возраст в целое:
>>> lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
>>> person_iter = (item.split(' ') for item in lists)
>>> d = {k: int(v) for k, v in person_iter}
>>> print sorted((v, k) for k, v in d.iteritems())
[(10, 'ben'), (20, 'jack'), (35, 'ollie'), (50, 'alisdar')]
person_iter
является генератор, который производит пары именного возраста.Вы передаете это понимание словаря и преобразуете второй аргумент в целое.
Основная идея состоит в том, что вам будет легче, если вы используете более точные типы данных для своих целей.
Благодарим вас за этот замечательный ответ, пожалуйста, можете ли вы рассказать о том, как работает key = lamdba? В первый раз я буду использовать его, большое спасибо. – jackdh
Благодарим вас за распространение этого очень информативного! – jackdh