python - 排序python列表基于另一个列表
问题描述
我有以下主列表:
[
{'entity': 'Country', 'cnt': 4},
{'entity': 'State', 'cnt': 3},
{'entity': 'City', 'cnt': 2}
]
注意实体的顺序。
我希望根据第一个列表中实体的顺序订购另一个列表。
第二个清单:
[
{'entity': 'State', 'values': 'AK'},
{'entity': 'Country', 'values': 'USA'}
]
期望的输出:
[
{'entity': 'Country', 'values': 'USA'},
{'entity': 'State', 'values': 'AK'}
]
我尝试了以下方法:
secondList.sort(key=lambda x: firstList.index(x["entity"]))
但是,它给了我一个错误,因为在第二个列表中找不到 City。
有人可以告诉我我在这里做错了什么吗?
解决方案
你也许可以做一些预处理:
master = [
{'entity': 'Country', 'cnt': 4},
{'entity': 'State', 'cnt': 3},
{'entity': 'City', 'cnt': 2}
]
to_sort = [
{'entity': 'State', 'values': 'AK'},
{'entity': 'Country', 'values': 'USA'}
]
prep = { record['entity'] : i for i, record in enumerate(master) }
sorted(to_sort, key = lambda x: prep[x['entity']])
推荐阅读
- tensorflow - 如何在 coco 数据集上获得预训练模型(Faster RCNN inception v2)的准确性
- python - defer.succeed 的 asyncio 等价物是什么?
- javascript - 使用 Angular Typescript 11 和 electron 13 时,Node JS 没有导出成员 Require
- django - Django Query 将数据提取到单个表中,然后到 pandas DataFrame
- c++ - 为什么 C++ 正则表达式函数使用输出参数?
- typescript - 使用 fast-csv 如何调用异步验证器?
- java - 无法解析“FirebaseInstanceIdReceiver”中的方法“getInstanceIdReciever”
- php - Laravel 8 - 更改模型的数据库连接
- spring-boot - 随着用户数量的增加,RabbitMQ+Spring Boot Realtime Server 变慢
- c - I executed this code to get reverse of a input string without changing the position of spaces in c