2016-03-16 1 views
0

Предположим, у меня есть список с именем L и два словаря атрибутов с именем arr1 и arr2, чьими ключами являются элементы списка L. Теперь я хочу сортировать L следующим образом.Как отсортировать список в Python, используя два значения атрибута?

  1. L должны быть отсортированы в порядке возрастания в силу значений атрибутов, присутствующих в arr1.
  2. Если два элемента i и j из L имеют тот же атрибут arr1, я, е, если arr1[i] и arr[j] равны, то мы должны искать для значений атрибутов в arr2.

В качестве примера, предположим, что

L=[0,1,2,3,4,5,6] 
arr1={0:30,1:15,2:15,3:20,4:23,5:20,6:35} 
arr2={0:6,1:8,2:6,3:17,4:65,5:65,6:34} 

Сортировано L должно быть [2,1,3,5,4,0,6], заказ от 1 до 2 решается arr2, так что делает упорядочение между 3 и 5. Остальные упорядочения решаются по arr1.

ответ

1

Просто используйте кортеж со значениями из arr1 и arr2, как ключ сортировки:

L.sort(key=lambda x: (arr1[x], arr2[x])) 
# [2, 1, 3, 5, 4, 0, 6] 

Это отличается от ожидаемого результата в упорядочении 5 и 3, что соответствовало бы, если порядок сортировки будет быть убыванию на основе arr2:

L.sort(key=lambda x: (arr1[x], -arr2[x])) 
# [1, 2, 5, 3, 4, 0, 6] 

Но теперь порядок 1, 2 отличается, ваш пример, кажется, не заказывается последовательным образом.

+0

получил его, спасибо помощнику. Я ошибся в финальном выпуске. –

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