2017-01-31 2 views
0

У меня есть этот кусок кодаPython: Как отсортировать второй элемент кортежа?

relations = dict() 
relations[('a','b','c')] = 'first' 
relations[('a','c','c')] = 'third' 
relations[('d','b','c')] = 'second' 

relations_sorted = sorted(relations.keys(), key=lambda tup: tup[1]) 

for key in relations_sorted: 
    print(key, relations[key]) 

Это печатает словарь отсортированный на втором элементе ключа кортежа (решение найдено на StackOverflow).

(('d', 'b', 'c'), 'second') 
(('a', 'b', 'c'), 'first') 
(('a', 'c', 'c'), 'third') 

Как это расширить для сортировки по комбинации второго, затем первого, а затем третьего элемента в кортеже? Например.

(('a', 'b', 'c'), 'first') 
(('d', 'b', 'c'), 'second') 
(('a', 'c', 'c'), 'third') 

ответ

4

Просто используйте key=lambda tup: (tup[1], tup[0], tup[2])

или даже быстрее/проще/лучше с operator.itemgetter:

from operator import itemgetter 

relations_sorted = sorted(relations.keys(), key=itemgetter(1, 0, 2)) 
1

Изменение к key=lambda tup: (tup[1], tup[0], tup[2])

Смежные вопросы