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

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

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 списка строк в список кортежей
  • Когда следует использовать list.count (0) и как мне сбрасывать товар «False»?
  • Есть ли лучший способ перебора двух списков, получая по одному элементу из каждого списка для каждой итерации?
  • Изменить значения в списке словарей?
  • Как создать двух циклов для представления в python
  • Сортировка одного списка для соответствия другому в python
  • Проверьте, находятся ли два элемента в списке в определенном порядке?
  • Python - лучший язык программирования в мире.