根据特定顺序对字典列表进行排序

时间:2010-08-24 18:51:45

标签: python sorting dictionary mapping

我使用的是Python 2.6,我有两个数据存储。查询第一个返回特定顺序的文档ID列表。我使用这些ID在第二个数据存储中一次查找所有文档,这些ID返回一个字典列表(每个文档一个),但与原始列表的顺序不同。我现在需要重新排序这个词典列表,以便文档按照其ID在第一个列表中的顺序排列。这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:4)

别。

将您的“词典列表(每个文档一个),但与原始列表的顺序不同”移动到字典中。

这个新的字典词典具有匹配的键。

然后按照它的顺序浏览你的第一个列表,找到匹配的字典词典中的项目。

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 :(得分:1)

您可以构建一个单独的字典映射ID到位置并使用它来订购文档:

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

docs = ...
docs.sort(key=lambda doc: positions[doc['id']])

答案 2 :(得分:0)

这里似乎给出了最佳(和一般)解决方案:reordering list of dicts arbitrarily in python