2016-10-31 3 views
3
a = [('dog', 4, 5), ('cat', 1, 3), ('house', 6, 3), ('car', 1, 1), ('boyfriend', 2, 2), ('doll', 1, 1) 

Как я могу отсортировать этот список в порядке убывания, исходя из суммы между этими двумя числами, и, если сумма будет такой же, как я могу сортировать ее на основе на первый элемент?Python, как отсортировать список на основе суммы

Мой список должен быть:

a = [('dog', 4, 5), ('house', 6, 3), ('boyfriend', 2, 2), ('cat', 1, 3), ('car', 1, 1), ('doll', 1, 1) 

ответ

3

Используйте пользовательские key функцию возвращает кортеж, где первый элемент является суммой, а второй является первым пунктом каждого подэлемента:

In [2]: sorted(a, key=lambda item: (-(item[1] + item[2]), item[0])) 
Out[2]: 
[('dog', 4, 5), 
('house', 6, 3), 
('boyfriend', 2, 2), 
('cat', 1, 3), 
('car', 1, 1), 
('doll', 1, 1)] 

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

+1

Это убывающий заказ на сумму, поэтому добавьте '-'. Также 'sum (item [1:])' действительно кажется излишним для 'item [1] + item [2]'. –

+0

@AlexHall да, поправляя, спасибо. – alecxe