我有一个元组列表,每个元组都包含有关员工的信息。
EmpList= [('1253', 'Fred'), ('889', 'Sue'), ('1389', 'Sally')]
我想按员工编号升序排列。使用排序,我的第一个倾向,是行不通的,因为数字不是整数。因此
sorted(EmpList)
[('1253', 'Fred'), ('1389', 'Sally'), ('889', 'Sue')]
当我想要的时候
[('889', 'Sue'), ('1253', 'Fred'), ('1389', 'Sally')]
最佳答案
您可以为此使用 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'
的计算结果为 True。
这绝对不是您想要的。因此,要正确执行此操作,请将其转换为 int
。
关于python - 按整数排列元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038765/