如何按第一个值排序列表列表

时间:2016-11-22 14:22:21

标签: python

我有一个类似于此列表的列表

l1 = [[1,'steve'],[4,'jane'],[3,'frank'],[2,'kim']]

我想按第一个号码订购

我将如何解决这个问题,谢谢

6 个答案:

答案 0 :(得分:9)

默认情况下,>>> l1 = [[1,'steve'],[4,'jane'],[3,'frank'],[2,'kim']] >>> sorted(l1) [[1, 'steve'], [2, 'kim'], [3, 'frank'], [4, 'jane']] 将使用第一个元素:

l1.sort()

正如评论中所述,>>> [1, 'something'] < [2, 'something'] True 会对原始列表进行排序,如果您不需要保留原始订单,这是更好的选择。

这是比较运算符在Python中的工作方式:

>>> [1, 1, 1] < [1, 1, 2]
True

请注意,如果第一个元素比较相等,它将比较第二个元素,依此类推:

>>> sorted([[1, 'mike'], [1, 'bob']])
[[1, 'bob'], [1, 'mike']]

这意味着具有相同编号的两个名称将按字符串排序(按字典顺序),而不是就位:

GroupDescription

答案 1 :(得分:2)

Python sort会默认将列表与第一个元素进行比较。如果它们是相同的,它将继续第二个元素,依此类推。

所以

l1.sort()

会做的。

但是如果你真的只想按第一个值排序而不是其他任何东西:

sorted(l1, key=lambda id_and_name: id_and_name[0])
#=> [[1, 'steve'], [2, 'kim'], [3, 'frank'], [4, 'jane']]

答案 2 :(得分:0)

l1.sort(key=lambda x: int(x[0]))

该技巧应该确保你有int()强制转换,因为你可以遇到更大数字的更多错误,因为整数是按字典比较的。即,'5'将大于'20'

答案 3 :(得分:0)

from operator import itemgetter
l1 = [[1,'steve'],[4,'jane'],[3,'frank'],[2,'kim']]
l1 = sorted(l1, key=itemgetter(0))

答案 4 :(得分:0)

l1 = [[1,'steve'],[4,'jane'],[3,'frank'],[2,'kim']]
ol = sorted(l1, key=lambda key_value: key_value[0])

print (ol)

输出:

[[1, 'steve'], [2, 'kim'], [3, 'frank'], [4, 'jane']]

答案 5 :(得分:0)

尝试以下方法:

l1 = [[1,'steve'],[4,'jane'],[3,'frank'],[2,'kim']]
sorted_l1 = sorted(l1, key=lambda item: item[0])  # Or simply sorted(l1)

<强>输出:

>>> sorted_l1
[[1, 'steve'], [2, 'kim'], [3, 'frank'], [4, 'jane']]

如果要更新相同的列表(要进行排序),请尝试以下操作:

>>> l1.sort(key=lambda item: item[0])  # Or simply l1.sort()
>>> l1
[[1, 'steve'], [2, 'kim'], [3, 'frank'], [4, 'jane']]