如何按指定值序列对字典列表的指定key排序,要求不使用循环
Python 按指定列表顺序对字典列表排序方案
前置准备
你提供的原始数据如下:
list_dict = [{'a': 'car', 'b': 4}, {'a': 'train', 'b': 10}, {'a': 'flight', 'b': 6}, {'a': 'bike', 'b': 2}] a_list = ["flight", "bike", "train", "car"]
实现方案
无需手动编写循环,直接调用Python内置的sorted函数,通过指定排序key即可实现需求:
小数据量最简方案
res = sorted(list_dict, key=lambda x: a_list.index(x['a']))
大数据量优化方案
如果数据量较大,推荐提前构建索引映射字典,将排序时的查找复杂度从O(n)降低到O(1),效率更高:
# 提前构建值到对应索引的映射关系 order_map = {val: idx for idx, val in enumerate(a_list)} res = sorted(list_dict, key=lambda x: order_map[x['a']])
输出结果
打印res即可得到你需要的结果:
print(res) # 输出:[{'a': 'flight', 'b': 6}, {'a': 'bike', 'b': 2}, {'a': 'train', 'b': 10}, {'a': 'car', 'b': 4}]
异常场景兼容说明
如果字典中a字段的取值可能存在不在a_list范围内的情况,可以在key中添加默认值避免报错,示例如下(不在指定顺序里的元素会默认排在最后):
res = sorted(list_dict, key=lambda x: order_map.get(x['a'], float('inf')))
内容的提问来源于stack exchange,提问作者Soumee Giri
相关产品推荐
相关产品推荐

