重新排列列表中的子列表

时间:2017-12-07 11:49:13

标签: python list sorting tuples

我很难重新安排名单元组列表,第一个和最后一个。我想按姓氏对列表进行排序,如果有相同的姓氏,那么这些名称的子列表应按名字排列。第一部分很容易使用sorted和key = get_key1,但我有困难来完成问题的第二部分。

这样的清单:

[('Tom','Haim'),('Eli','Levi'),('Eli','Cohen'),('Moshe','Levi'),('Haim','Cohen'),('Dina','Ram'),('Tova','Ben'),('Ben','Levi'),('Gil','Cohen'),('Eli','Ram')]

应该像:

[('Tova', 'Ben'), ('Eli', 'Cohen'), ('Gil', 'Cohen'), ('Haim', 'Cohen'), ('Tom', 'Haim'), ('Ben', 'Levi'), ('Eli', 'Levi'), ('Moshe', 'Levi'), ('Dina', 'Ram'), ('Eli', 'Ram')]

我得到的最好的是:

[('Tova', 'Ben'), ('Eli', 'Cohen'), ('Haim', 'Cohen'), ('Gil', 'Cohen'), ('Tom', 'Haim'), ('Eli', 'Levi'), ('Moshe', 'Levi'), ('Ben', 'Levi'), ('Dina', 'Ram'), ('Eli', 'Ram')]

谢谢

2 个答案:

答案 0 :(得分:2)

如果将元组作为键返回,它将首先按第一个元素排序,然后按第二个元素排序。由于您希望按姓氏排序,因此您的密钥首先应返回(last name, first name)

l = [('Tom','Haim'),('Eli','Levi'),('Eli','Cohen'),('Moshe','Levi'),('Haim','Cohen'),('Dina','Ram'),('Tova','Ben'),('Ben','Levi'),('Gil','Cohen'),('Eli','Ram')]

def get_key1(x):
    return (x[1], x[0])

print(sorted(l, key=get_key1))

答案 1 :(得分:1)

您可以使用sort()的{​​{1}}方法对苍蝇列表进行排序:

list

输出:

inlist = [('Tom','Haim'),('Eli','Levi'),('Eli','Cohen'),('Moshe','Levi'),('Haim','Cohen'),('Dina','Ram'),('Tova','Ben'),('Ben','Levi'),('Gil','Cohen'),('Eli','Ram')]
inlist.sort(key = lambda i: (i[1],i[0]))
print(inlist)

{@ 1}}的替代方案,由@cezar建议来自[('Tova', 'Ben'), ('Eli', 'Cohen'), ('Gil', 'Cohen'), ('Haim', 'Cohen'), ('Tom', 'Haim'), ('Ben', 'Levi'), ('Eli', 'Levi'), ('Moshe', 'Levi'), ('Dina', 'Ram'), ('Eli', 'Ram')] 模块的lambda

itemgetter

输出:

operator