在Python 3中排序2D列表

时间:2015-03-23 00:56:05

标签: python sorting

我在python 3中排序多维列表时遇到困难。我想根据名称按字母顺序对下面的列表进行排序,然后根据 decesending中的年龄以另一种方式对列表进行排序。我已经尝试使用sorted函数和lambda键,但我得到了相同的索引错误,表明列表超出范围。我如何对整个列表进行排序?

    mylist = []
    mylist.append([])
    mylist.append([])
    mylist.append([])
    mylist[0].append("Anna")
    mylist[0].append("Maria")
    mylist[1].append("Doctor")
    mylist[1].append("Teacher")
    mylist[2].append(36) 
    mylist[2].append(28)  

2 个答案:

答案 0 :(得分:1)

您可以按如下方式使用operator.itemgetter()

import operator

mylist = []
mylist.append([])
mylist.append([])
mylist.append([])
mylist[0].append("Anna")
mylist[1].append("Maria")
mylist[2].append("Aaron")
mylist[0].append("Doctor")
mylist[1].append("Teacher")
mylist[2].append("Student")
mylist[0].append(36)
mylist[1].append(28)
mylist[2].append(13)


name_sort = sorted(mylist, key = operator.itemgetter(0))
age_sort = sorted(mylist, key = operator.itemgetter(2), reverse=True)

print(name_sort)
print(age_sort)

首先打印出按名称递增排序的列表,然后打印按年龄降序排序的列表:

>>> 
[['Aaron', 'Student', 13], ['Anna', 'Doctor', 36], ['Maria', 'Teacher', 28]]
[['Anna', 'Doctor', 36], ['Maria', 'Teacher', 28], ['Aaron', 'Student', 13]]

另请注意,我已更改了列表的创建方式:每个子列表都包含有关"实体/人员的所有信息。而不是所有属性(例如年龄,名称等)

答案 1 :(得分:1)

试试这个:

mylist = []
mylist.append([])
mylist.append([])
mylist.append([])
mylist[0].append("Anna")
mylist[1].append("Maria")
mylist[2].append("Aaron")
mylist[0].append("Doctor")
mylist[1].append("Teacher")
mylist[2].append("Student")
mylist[0].append(36)
mylist[1].append(28)
mylist[2].append(13)

mylist.sort(key=lambda x : x[2] , reverse = True)

如果您想按年龄降序排序......

如果要根据年龄进行排序,则需要使用lambda函数。 这可以通过设置您希望根据元素索引位置对列表进行排序的键(即在此情况下为list-> age中的第二个元素)。 最后使用reverse = True语句。这基本上解释了自己。它只是反转列表,从而按降序排列。那就是它!

如果您想按字母顺序排序......

.sort()函数最初使用列表中的第一个元素。因此,如果您想根据人名按字母顺序对其进行排序,那么您只需使用这行代码mylist.sort()即可。

如果您仍然难以理解,请点击here