我有一个类似于此列表的列表
l1 = [[1,'steve'],[4,'jane'],[3,'frank'],[2,'kim']]
我想按第一个号码订购
我将如何解决这个问题,谢谢
答案 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']]