You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何按自定义规则排序字典列表提取的唯一键

Python字典提取键的自定义排序实现

你从venues列表提取所有字典唯一键时用了集合推导式,Python中集合是无序结构,所以得到的键列表顺序随机,要按照指定顺序排序可以直接用列表自带的排序方法,传入自定义排序规则即可。

方法1:索引映射法(推荐,效率高)

提前把目标顺序转成「键-排序位置」的字典,排序时直接查对应位置作为排序依据,适合数据量较大的场景:

venues =[{'capacity': 700, 'id': 1, 'name': 'AMD'},
{'capacity': 2000, 'id': 2, 'name': 'Honda'},
{'capacity': 2300, 'id': 3, 'name': 'Austin Kiddie Limits'},
{'capacity': 2000, 'id': 4, 'name': 'Austin Ventures'}]

# 定义期望的键顺序
sorted_keys = ['id','name','capacity']
# 生成排序优先级映射,索引越小排序越靠前
order_index = {key: idx for idx, key in enumerate(sorted_keys)}

# 提取所有唯一键
b = list({k for d in venues for k in d.keys()})
# 按自定义规则排序
b.sort(key=lambda k: order_index[k])

执行后b的输出固定为['id', 'name', 'capacity'],符合预期。

如果后续字典可能出现未在sorted_keys中预定义的新键,可以给映射加默认值,把未知键统一放到列表末尾:

b.sort(key=lambda k: order_index.get(k, float('inf')))

方法2:index直接取值(适合小数据量场景)

如果提取的键数量很少,不需要考虑排序效率,可以直接传入目标列表的index方法作为排序依据,写法更简洁:

sorted_keys = ['id','name','capacity']
b = list({k for d in venues for k in d.keys()})
b.sort(key=sorted_keys.index)

注意:这个方法每次排序比较时都会遍历sorted_keys查找索引,键的数量较多时性能会明显下降。


内容的提问来源于stack exchange,提问作者Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:18:21