我从一个排序的csv创建了以下列表

list1 = sorted(csv1, key=operator.itemgetter(1))

实际上,我想根据两个标准对列表进行排序:首先是字段1中的值,然后是字段2中的值。我怎么做呢?


当前回答

是这样的:

import operator
list1 = sorted(csv1, key=operator.itemgetter(1, 2))

其他回答

使用lambda函数时不需要导入任何东西。 下面按第一个元素排序,然后按第二个元素排序。你也可以通过一个字段升序排序,另一个字段降序排序,例如:

sorted_list = sorted(list, key=lambda x: (x[0], -x[1]))
list1 = sorted(csv1, key=lambda x: (x[1], x[2]) )

是这样的:

import operator
list1 = sorted(csv1, key=operator.itemgetter(1, 2))

python 3 https://docs.python.org/3.5/howto/sorting.html#the-old-way-using-the-cmp-parameter

from functools import cmp_to_key

def custom_compare(x, y):
    # custom comparsion of x[0], x[1] with y[0], y[1]
    return 0

sorted(entries, key=lambda e: (cmp_to_key(custom_compare)(e[0]), e[1]))

在阅读了这篇文章中的答案后,我写了一个通用的解决方案,适用于任意数量的列:

def sort_array(array, *columns):
    for col in columns:
        array.sort(key = lambda x:x[col])

OP会这样称呼它:

sort_array(list1, 2, 1)

先按列2排序,再按列1排序。 (最重要的一栏放在最后)