如何按几个键对元组列表进行排序

2024-09-27 09:36:10 发布

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

我在做一个关于Python和列表的练习,其中有一个问题: 我有一个按第二个键排序的元组列表:

[('f', 3), ('a', 3), ('d', 3), ('b', 2), ('c', 2)]

我需要排序:第二个值按数字排序,第一个值按字母顺序排序。它必须看起来像:

^{pr2}$

当我使用sorted函数时,我得到了:

[('a', 3), ('b', 2), ('c', 2), ('d', 3), ('f', 3)]

它按第一个元素排序(我失去了第二个元素的排列)。我还尝试使用key

def getKey(item):
  return item[0]
a = (sorted(lis, key=getKey))

这对我也没什么帮助。在


Tags: key函数元素列表return排序顺序def
3条回答

当有一个嵌套元组的列表时,不能通过查看这两个元素来sort。在您的例子中,您可以按字母顺序或数字顺序sort。使用sort方法的key参数,可以指定元组对中要对数据排序的元素。在

如果要按递增的数字顺序排序:

alist = [('f', 3), ('a', 3), ('d', 3), ('b', 2), ('c', 2)]
alist.sort(key=lambda pair: pair[1])

如果要按数字降序排序:

^{pr2}$

如果要按字母顺序排序:

alist = [('f', 3), ('a', 3), ('d', 3), ('b', 2), ('c', 2)]
alist.sort()

颠倒字母顺序:

alist = [('f', 3), ('a', 3), ('d', 3), ('b', 2), ('c', 2)]
alist.sort(reverse = True)

key参数让您指定要按元组对中的哪个元素进行排序。 不能同时按字母和数字顺序排序。在

正确答案:

l = [('f', 4), ('b', 4), ('a', 4), ('c', 3), ('k', 1)]
l.sort(key=lambda x:(-x[1],x[0]))
print(l)

结果: [(“a”,4),(“b”,4),(“f”,4),(“c”,3),(“k”,1)]

l = [('f', 4), ('b', 4), ('a', 4), ('c', 3), ('k', 1)]
l.sort(key=lambda x:(-x[1],x[0]))
print(l)
[('a', 4), ('b', 4), ('f', 4), ('c', 3), ('k', 1)]

我们传递两个键来排序-x[1],它将负号从高到低的数字排序,然后我们中断与{}的联系,后者从最低到最高排序,即a-z。在

`

相关问题 更多 >

    热门问题