首页 > 解决方案 > 排序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。

有人可以告诉我我在这里做错了什么吗?

标签: pythonpython-3.xlist

解决方案


你也许可以做一些预处理:

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']])

推荐阅读