繁体   English   中英

根据另一个对dicts列表进行排序

[英]Sort list of dicts according to another one

我有这两个字典列表:

list_1 = [{'document_id': '5'}, {'document_id': '2'}, {'document_id': '4'}]

list_2 = [{'document_id': '4', 'page_id': '1'}, {'document_id': '5', 'page_id': '2'}, {'document_id': '5', 'page_id': '1'}]

list_1list_2document_id方面的超集,如果这有帮助的话。

我想要

  1. 根据list_1list_2进行排序
  2. 然后根据每个不同的document_idpage_idlist_2进行排序

因此,我想最终拥有这个:

new_list_2 = [{'document_id': '5', 'page_id': '1'}, {'document_id': '5', 'page_id': '2'}, {'document_id': '4', 'page_id': '1'}]

我怎样才能有效地做到这一点?

通过字典理解在list_1创建排序的映射。

docs = {doc.get('document_id'): n for n, doc in enumerate(list_1)}
# >>> docs
# {'5': 0, '2': 1, '4': 2}

然后使用带有page_id的排序作为排序键。

list_2.sort(key=lambda r: (docs[r['document_id']], r['page_id']))

>>> list_2
[{'document_id': '5', 'page_id': '1'},
 {'document_id': '5', 'page_id': '2'},
 {'document_id': '4', 'page_id': '1'}]
  1. 这与如何根据另一个列表对列表进行排序基本相同 唯一的区别是您需要先从list_1获取文档 ID。
  2. 请参阅按多个属性对列表进行排序?

全部一起:

docs_1 = [d['document_id'] for d in list_1]  # = ['5', '2', '4']
list_2.sort(key=lambda d: (docs_1.index(d['document_id']), d['page_id']))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM