按整数排列元组列表

kev*_*vin 3 python tuples

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

EmpList= [('1253', 'Fred'), ('889', 'Sue'), ('1389', 'Sally')]
Run Code Online (Sandbox Code Playgroud)

我想按照他们的员工编号按顺序安排他们.使用sorted,我的第一个倾向,不起作用,因为数字不是整数.于是

sorted(EmpList)
[('1253', 'Fred'), ('1389', 'Sally'), ('889', 'Sue')]
Run Code Online (Sandbox Code Playgroud)

当我想要的时候

[('889', 'Sue'), ('1253', 'Fred'), ('1389', 'Sally')]
Run Code Online (Sandbox Code Playgroud)

ssh*_*124 5

你可以用lambda它:

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

你的情况

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

要获得反转值,您可以:

>>> 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')]
Run Code Online (Sandbox Code Playgroud)

注意

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

>>> '889' > '1253'
True
Run Code Online (Sandbox Code Playgroud)

这是因为当python比较每个字符串的第一个字符时,'8'大于'1',因此,'889' > '1253'计算结果为True.

这绝对不是你想要的.所以要正确地做到这一点,把它作为int.