在 Python 中,list.sort()
方法和 sorted()
函数允许我们通过 key
参数指定一个键函数,而不是直接传入比较函数。
如果你想通过自定义比较函数进行排序,可以使用 functools.cmp_to_key
将比较函数转换为 key
函数。以下是方法和示例:
使用 functools.cmp_to_key
转换比较函数
import functools
# 自定义比较函数
def compare_items(item1, item2):
# 如果 item1 的 top1 小于 item2 的 top1,返回 -1
# 如果 item1 的 top1 大于 item2 的 top1,返回 1
# 如果相等,返回 0
if item1["top1"] < item2["top1"]:
return -1
elif item1["top1"] > item2["top1"]:
return 1
else:
return 0
# 用 cmp_to_key 转换比较函数
all_config.sort(key=functools.cmp_to_key(compare_items))
示例说明
假设 all_config
是一个列表,像这样:
all_config = [
{"top1": 90, "name": "modelA"},
{"top1": 85, "name": "modelB"},
{"top1": 95, "name": "modelC"}
]
运行上面的代码后,all_config
会按 top1
的升序排序:
[
{"top1": 85, "name": "modelB"},
{"top1": 90, "name": "modelA"},
{"top1": 95, "name": "modelC"}
]
如果不需要比较函数
如果仅需要按 top1
升序排序,你可以直接使用 key
参数传入:
all_config.sort(key=lambda s: s["top1"])
选择具体方法取决于你的需求:
- 如果是简单字段排序,直接用
key
参数。 - 如果需要复杂的逻辑,使用
functools.cmp_to_key
。