Сортировка списка словарей по заданному порядку - PullRequest
0 голосов
/ 24 августа 2010

Я использую Python 2.6 и у меня есть два хранилища данных.Запрос первого возвращает список идентификаторов документов в определенном порядке.Я просматриваю все документы сразу во втором хранилище данных, используя эти идентификаторы, которые возвращают список словарей (по одному на каждый документ), но не в том же порядке, что и исходный список.Теперь мне нужно пересортировать этот список словарей, чтобы документы были в том порядке, в котором их идентификаторы были в первом списке.Какой лучший способ сделать это?

Ответы [ 3 ]

4 голосов
/ 24 августа 2010

Не.

Переместите «список словарей (по одному на каждый документ), но не в том же порядке, что и исходный список» в словарь.

Этот новый словарь-of-словарей имеет соответствующий ключ.

Затем просмотрите ваш первый список в его порядке и найдите в словаре словарей соответствующие слова.

some_list= query_data_store_1()
some_other_list= query_data_store_2( some_list )

dict_of_dict = dict( (d['key'], d) for d in some_other_list )

for item in some_list:
    other_item = dict_of_dict[ item['key'] ]

    # Now you have item from the first list matching item from the second list.
    # And it's in order by the first list.
1 голос
/ 24 августа 2010

Вы можете создать отдельный словарь, сопоставляющий идентификаторы с позициями и использовать его для упорядочения документов:

ids = ...
positions = {}
for pos, id in enumerate(ids):
   positions[id] = pos

docs = ...
docs.sort(key=lambda doc: positions[doc['id']])
0 голосов
/ 27 августа 2010

Лучшее (и общее) решение, кажется, дается здесь: переупорядочение списка диктов произвольно в python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...