python:类对象的多维排序

Chr*_*ian 1 python sorting object

有没有办法首先为x排序列表,而不是y和z.我不确定我的代码是否会这样做:(ch是attribut left_edge的对象)

ch.sort(cmp=lambda x,y: cmp(x.left_edge[0], y.left_edge[0]))
ch.sort(cmp=lambda x,y: cmp(x.left_edge[1], y.left_edge[1]))
ch.sort(cmp=lambda x,y: cmp(x.left_edge[2], y.left_edge[2]))
Run Code Online (Sandbox Code Playgroud)

简单的例子:

unsorted
(1,1,2),(2,1,1),(1,1,3),(2,1,2)
sorted
(1,1,2),(1,1,3),(2,1,1),(2,1,2)
Run Code Online (Sandbox Code Playgroud)

但我需要排序的对象......

ice*_*ime 7

这正是默认tuple比较器的工作原理:

>>> l = [(1, 1, 2), (2, 1, 1), (1, 1, 3), (2, 1, 2)]
>>> sorted(l)
[(1, 1, 2), (1, 1, 3), (2, 1, 1), (2, 1, 2)]
Run Code Online (Sandbox Code Playgroud)

请参阅文档中的比较说明:

相同类型的对象的比较取决于类型:

  • 使用相应元素的比较,按字典顺序比较元组和列表.这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同类型并且具有相同的长度.

    如果不相等,则序列的排序与它们的第一个不同元素相同.例如,cmp([1,2,x],[1,2,y])返回与cmp(x,y)相同的值.如果相应的元素不存在,则首先排序较短的序列(例如,[1,2] <[1,2,3]).