按整数排列元组列表

时间:2014-04-13 03:25:34

标签: python tuples

我有一个元组列表,每个元组都包含有关员工的信息。

EmpList= [('1253', 'Fred'), ('889', 'Sue'), ('1389', 'Sally')]

我想按员工编号按顺序排列。使用sorted,我的第一个倾向,不起作用,因为数字不是整数。因此

sorted(EmpList)
[('1253', 'Fred'), ('1389', 'Sally'), ('889', 'Sue')]

当我想要

[('889', 'Sue'), ('1253', 'Fred'), ('1389', 'Sally')]

1 个答案:

答案 0 :(得分:5)

您可以使用lambda

a = [('1253', 'Fred'), ('1389', 'Sally'), ('889', 'Sue')]
b = sorted(a, key=lambda a: int(a[0]))

您的案例

>>> EmpList = [('1253', 'Fred'), ('889', 'Sue'), ('1389', 'Sally')]
>>> b = sorted(a, key=lambda EmpList: int(EmpList[0]))
>>> b
[('889', 'Sue'), ('1253', 'Fred'), ('1389', 'Sally')]

要获得反转值,您可以执行以下操作:

>>> EmpList = [('1253', 'Fred'), ('889', 'Sue'), ('1389', 'Sally')]
>>> b = sorted(a, key=lambda EmpList: int(EmpList[0]), reversed=True)
>>> b
[('1389', 'Sally'), ('1253', 'Fred'), ('889', 'Sue')]

注意

请注意将a[0]强制转换为int的重要性。这是因为如果不将它转换为int,python将对字符串进行比较:

>>> '889' > '1253'
True

这是因为当python比较每个字符串的第一个字符时,' 8'大于' 1'因此,'889' > '1253'评估为真。

这绝对是你想要的。所以要正确地做到这一点,将其转换为int