按字母顺序对字符串元组进行排序,并按字母顺序反向排序'

2024-10-06 15:25:54 发布

您现在位置:Python中文网/ 问答频道 /正文

假设你有一个元组列表(姓,名),你想按姓氏的字母顺序倒序排序,然后如果两个人同名,就按名字的字母顺序对他们进行排序。有没有办法用一条线做到这一点?在

例如

Sorted(names, key = ?) = [('Zane', 'Albert'), ('Zane', 'Bart'), ('Python', 'Alex'), ('Python', 'Monty')]

有两行,我想你可以依赖排序稳定性,先按名字排序,然后按姓氏排序。在


Tags: key列表names排序顺序字母名字元组
3条回答

这里有一个itertools.groupby解决方案:

from itertools import groupby
from operator import itemgetter

li = [('x', 'y'), ('s', 'e'), ('s, 'a'), ('x', 'z')]

[p for k, g in groupby(sorted(li, reverse=True), itemgetter(0)) for p in reversed(list(g))]
# [('x', 'y'), ('x', 'z'), ('s', 'a'), ('s', 'e')]

Is there a way to do this with one line?

With two lines I guess you could rely on sort stability and first sort by first name and then sort by last name reversed.

你完全可以用一句话做到:

sorted(sorted(names, key=lambda name: name[1]), key=lambda name: name[0], reverse=True)

Sorting Mini-HOW TO“中对这个问题进行两次排序要按降序和升序对学生数据进行排序,请先进行年龄排序,然后使用grade“”再次排序)。在


只有一个sortedkey来做这件事是愚蠢的选择:

^{pr2}$

Python2解决方案包含一个sorted和{}而不是{}:

sorted(names, lambda a, b: cmp(b[0], a[0]) or cmp(a, b))

是的,您可以依靠分拣的稳定性:

names = [('Zane', 'Albert'), ('Zane', 'Bart'), ('Python', 'Alex'), ('Python', 'Monty')]

names.sort()
names.sort(reverse=True, key=lambda i: i[0])

相关问题 更多 >