我有以下根据排序的 csv 创建的列表
list1 = sorted(csv1, key=operator.itemgetter(1))
我实际上想按两个标准对列表进行排序:首先按字段 1 中的值,然后按字段 2 中的值。我该怎么做呢?
要按照两个标准对列表进行排序,你可以使用 Python 的 sorted() 函数,并提供一个用于排序的键函数,这个函数返回一个元组,元组中包含按照优先顺序排列的字段值。这里是如何按照字段 1 和字段 2 对列表进行排序的方法:
sorted()
假设 csv1 是一个包含元组(或列表)的列表,每个元组至少有两个字段:
csv1
import operator # 假设 csv1 是一个包含元组的列表,每个元组有两个字段 csv1 = [ (1, 3), (2, 2), (1, 2), (2, 1), (3, 1), (1, 1) ] # 使用 key 函数按字段 1 和字段 2 排序 list1 = sorted(csv1, key=lambda x: (x[0], x[1])) print(list1)
在这个例子中: - csv1 是一个包含元组(或列表)的列表,每个元素有两个字段。 - sorted() 使用一个 key 函数,这个函数返回一个元组 (x[0], x[1]),其中 x 表示 csv1 中的每个元素。 - 排序首先按照 x[0](字段 1)排序,然后按照 x[1](字段 2)排序。
key
(x[0], x[1])
x
x[0]
x[1]
这种方法确保 list1 首先按字段 1 中的值排序。如果两个元素在字段 1 中具有相同的值,则按字段 2 中的值进行排序。
list1
operator.itemgetter
如果你喜欢使用 operator.itemgetter 而不是 lambda 函数来定义 key:
list1 = sorted(csv1, key=operator.itemgetter(0, 1))
在这里,operator.itemgetter(0, 1) 从 csv1 中的每个元组或列表中获取索引 0 和索引 1 处的元素,并且 sorted() 使用这些值作为排序键。
operator.itemgetter(0, 1)
如果 csv1 是通过 csv.reader 从实际 CSV 文件读取的数据,并且假设数据如下:
csv.reader
import csv import operator # 假设 CSV 数据(用实际的文件读取逻辑替换) csv_data = [ ['Alice', 25], ['Bob', 30], ['Alice', 30], ['Bob', 20], ['Carol', 35], ['Alice', 20] ] # 按名称(字段 0)和年龄(字段 1)排序 sorted_data = sorted(csv_data, key=operator.itemgetter(0, 1)) print(sorted_data)
输出:
[['Alice', 20], ['Alice', 25], ['Alice', 30], ['Bob', 20], ['Bob', 30], ['Carol', 35]]
这种方法确保首先按名称(字段 0)字母顺序排序,然后按年龄(字段 1)数值顺序排序,实现了所需的两个标准排序。根据你的实际情况,调整 csv_data 中的 CSV 读取逻辑以适应你的用例。
csv_data