按照特定顺序排序字典列表
我正在使用Python 2.6,并且有两个数据存储。查询第一个数据存储时,会返回一个按特定顺序排列的文档ID列表。我使用这些ID在第二个数据存储中一次性查找所有文档,这样会返回一个字典列表(每个文档对应一个字典),但这个列表的顺序和最初的ID列表不一样。现在我需要重新排序这个字典列表,让文档的顺序和第一个列表中的ID顺序一致。有什么好的方法可以做到这一点呢?
3 个回答
1
你可以建立一个单独的字典,把ID和位置对应起来,然后用这个字典来排序文档:
ids = ...
positions = {}
for pos, id in enumerate(ids):
positions[id] = pos
docs = ...
docs.sort(key=lambda doc: positions[doc['id']])
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.
0
这里似乎提供了一个最好的(也是通用的)解决方案:在Python中任意重新排序字典列表