猿问

按特定元素和该元素的子字符串对元组列表进行排序

我正在尝试对元组列表进行排序。它们采用这种格式:


("First Last", 3, 0)

或者换句话说:


(string, int, int)

我想按字符串值(第一个元组元素)排序。我从这个很棒的答案中找到了如何按某个元素对元组列表进行排序:https : //stackoverflow.com/a/3121985/8887398


这是我的代码:


# Yes, I do want to start from element 1 btw

myList[1:].sort(key=lambda tup: tup[0])

当我的元组中只有名字作为字符串的值时,这很有效,例如:


("George", 8, 3)

然后我添加了姓氏,例如:


("George Manning", 8, 3)

它不再正确排序,所以我尝试了这个:


myList[1:].sort(key=lambda tup: (tup[0].split(" ")[1]))

我非常有信心这会奏效。它没有。我很困惑,因为我知道我的split方法正确地从调试中提取了姓氏。我究竟做错了什么?如何按姓氏对我的列表进行排序?


这是一个例子。是的,它们是假名:


myList = [

    ("NAME", "SOME LABEL 1", "SOME LABEL 2"),

    ("Kevin Lee", 45, 4),

    ("John Bowes", 35, 2),

    ("George Smith", 8, 3),

    ("Gina Marnico", 40, 3),

    ("Alice Gordon", 48, 7),

    ("Lee Jackson", 49, 7),

    ("Adam Hao", 50, 4),

    ("Adrian Benco", 23, 2),

    ("Jessica Farner", 43, 20),

    ("Greg Hyde", 34, 20),

    ("Ryan Valins", 39, 7),

    ("Gary Funa", 49, 7),

    ("Sam Tuno", 15, 4),

    ("Katy Sendej", 30, 2),

    ("Jessica Randolf", 44, 8),

    ("Gina Gundo", 47, 30)

]


myList[1:].sort(key=lambda tup: (tup[0].split(" ")[1]))

我跳过第一个值,因为它是标签信息。我希望该元素保持不变,而列表的其余部分按姓氏排序。


慕斯709654
浏览 153回答 3
3回答

繁花不似锦

如果您想按姓氏排序,这可能会起作用:a = myList[1:]a.sort(key=lambda tup: tup[0].split(" ")[1])myList[1:] = a结果:[    ('NAME', 'SOME LABEL 1', 'SOME LABEL 2'),    ('Adrian Benco', 23, 2),    ('John Bowes', 35, 2),    ('Jessica Farner', 43, 20),    ('Gary Funa', 49, 7),    ('Alice Gordon', 48, 7),    ('Gina Gundo', 47, 30),    ('Adam Hao', 50, 4),    ('Greg Hyde', 34, 20),    ('Lee Jackson', 49, 7),    ('Kevin Lee', 45, 4),    ('Gina Marnico', 40, 3),    ('Jessica Randolf', 44, 8),    ('Katy Sendej', 30, 2),    ('George Smith', 8, 3),    ('Sam Tuno', 15, 4),    ('Ryan Valins', 39, 7)]如果你想按姓氏排序,然后首先你可以这样做:a.sort(key=lambda tup: list(reversed(tup[0].split(" "))))

江户川乱折腾

删除标签线,它的工作原理:    myList.sort(key=lambda tup: (tup[0].split(" ")[1]))结果 :    ('Adrian Benco', 23, 2)     ('John Bowes', 35, 2)     ('Jessica Farner', 43, 20)     ('Gary Funa', 49, 7)     ('Alice Gordon', 48, 7)     ('Gina Gundo', 47, 30)     ('Adam Hao', 50, 4)    ('Greg Hyde', 34, 20)     ('Lee Jackson', 49, 7)     ('Kevin Lee', 45, 4)    ('Gina Marnico', 40, 3)    ('Jessica Randolf', 44, 8)     ('Katy Sendej', 30, 2)     ('George Smith', 8, 3)     ('Sam Tuno', 15, 4)     ('Ryan Valins', 39, 7)
随时随地看视频慕课网APP

相关分类

Python
我要回答