Python使用sorted排序时如何直接获取排序所用lambda键值避免重复计算
Python排序保留计算键值的实现方案
Python原生支持该需求,无需引入第三方库,单行即可实现,核心思路是预打包键值与原元素后再排序,完全避免键函数的重复调用。
示例代码
print(sorted((temp(item[1]), item) for item in dict_a))
代码解释
- 首先通过生成器表达式遍历原可迭代对象,把每个元素和提前计算好的排序键打包为
(键值, 原元素)格式的元组,这一步每个元素仅会调用一次temp函数计算键值 - 利用Python元组默认按索引顺序优先比较第一个元素的特性,直接对打包后的元组排序,无需额外指定key参数
- 最终输出的结果就是你需要的
[(1, ('c', 1)), (4, ('b', 2)), (9, ('a', 3))]格式,无需后续二次计算键值
适用场景
如果排序键的计算逻辑复杂度高、耗时久,该写法可以完全省掉排序后重新遍历计算键的开销,且生成器不会额外占用大量内存存储中间结果,也适用于处理大体积的可迭代对象。
内容的提问来源于stack exchange,提问作者TernaryStripe
相关产品推荐
相关产品推荐

