2016-02-29 4 views
-4

Я искал что-то, чтобы отсортировать список пар по значениям и ключам в Python. Я нашел это:Сортировка по значению и ключу

list.sort(key=lambda (k, v): (-v, k)) 

Как работает эта лямбда-функция?

+0

Хорошо, что * * ваши сомнения, и что вы сделали, чтобы прояснить их? Например, вы пробовали тестировать его в интерпретаторе? – jonrsharpe

+0

Вы хотите отсортировать словарь по 'key' или' value'? –

+0

Я хочу сортировать список по значению, а затем сортировать по ключам те, которые имеют одинаковое значение. То, что я не понял, было -v, потому что я пробовал это без ... и мне показалось, что список отсортирован только по значениям. –

ответ

1

коррекции. list не содержат значения в key, value пара. key: value пара представлена ​​в словаре. Ниже приведен код для сортировки словаря по значениям, а затем на клавишах:

>>> d = {'apple': 2, 'banana': 3, 'almond':2 , 'beetroot': 3, 'peach': 4} 
>>> sorted(d.iteritems(), key=lambda(k, v): (-v, k)) 
[('peach', 4), ('banana', 3), ('beetroot', 3), ('almond', 2), ('apple', 2)] 

Объяснение: d.iteritems() возвращает iterator объект. В sorted(d.iteritems(), key=lambda(k, v): (-v, k)), key=lambda(k, v): (-v, k) означает, что сортировка будет основана сначала на порядке уменьшения значения i.e -v, а затем в порядке возрастания ключа i.e k.

Та же логика применима к коду для сортировки списка, как указано в вопросе.

+0

Я думаю, что OP хочет объяснения - не демо. –

+0

Обновленный ответ с объяснением. –

2

Он сортирует список по паре значений. Поскольку он сортирует список, нет никаких пар ключей, значений, но больше двух значений рядом друг с другом. То, как оно написано, сортируется по второму значению в обратном направлении, затем сортирует по первому значению в нормальном порядке по возрастанию.

Здесь демонстрируется:

l1 = [[2,2],[3,1],[1,2],[4,1]] 

l1.sort(key=lambda(k,v):(-v,k)) 

l1 
=> [[1, 2], [2, 2], [3, 1], [4, 1]] 
Смежные вопросы