Сортировка списка словарей при заказе

У меня есть список

order = [8, 7, 5, 9, 10, 11] 

и список словарей

 list_of_dct = [{'value':11}, {'value':8}, {'value':5}, {'value':7}, {'value':10}, {'value':9}] 

Я хочу отсортировать этот list_of_dct по порядку, указанному в списке order , то есть выход должен быть следующим:

 list_of_dct = [{'value':8}, {'value':7}, {'value':5}, {'value':9}, {'value':10}, {'value':11}] 

Я знаю, как сортировать по заданному key , но не тогда, когда уже задан заказ. Как я могу его отсортировать?

PS: У меня уже есть решение O (n ^ 2). Ищете лучшее решение.

2 Solutions collect form web for “Сортировка списка словарей при заказе”

Используйте индекс списка order для сортировки. Просто попробуйте, если каждый словарь имеет одно значение и вы хотите отсортировать его по этому значению,

 sorted(list_of_dct,key=lambda x:order.index(x.values()[0])) 

Но если у вас есть несколько значений для одного ключа, измените индекс (т. Е. [0] ), по которому вы будете сортировать.

Сделайте сопоставление от 8 до 0, от 7 до 1, …, от 11 до 5, используя enumerate :

 >>> order = [8,7,5,9,10,11] >>> list_of_dct = [{'value':11}, {'value':8}, {'value':5}, {'value':7}, {'value':10}, {'value':9}] >>> sort_keys = {item: i for i, item in enumerate(order)} >>> sort_keys {5: 2, 7: 1, 8: 0, 9: 3, 10: 4, 11: 5} 

И используйте его как сортирующий ключ:

 >>> list_of_dct.sort(key=lambda d: sort_keys.get(d['value'], len(sort_keys))) >>> list_of_dct [{'value': 8}, {'value': 7}, {'value': 5}, {'value': 9}, {'value': 10}, {'value': 11}] 

используйте sort_keys.get(..) вместо sort_keys[..] чтобы предотвратить KeyError в случае значения misisng в order .

  • Элементы группы списка с python размера шага?
  • Сортировка списка строк по части строки
  • Список папок в Python
  • Проверьте, находятся ли два элемента в списке в определенном порядке?
  • Как распечатать все возможности вложенных списков в python?
  • Самая длинная расширяющаяся уникальная подпоследовательность
  • Операции с списком Python
  • Пересечение переменного количества списков
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.