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

时间:2015-01-17 12:00:09

标签: python list sorting

我正在对Python进行练习并列出一个问题: 我有一个按第二个键排序的元组列表:

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

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

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

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

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

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

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

它也没有帮助我。

3 个答案:

答案 0 :(得分:0)

def getKey(item):
    return item[0]

这将返回元组的第一个元素,因此列表将按第一个元组元素排序。你想要按第二个元素排序,然后是第一个,所以你想要反转你的元组。您的关键功能需要是:

def getKey(item):
    return -item[1], item[0]

拨打最后的电话:

>>> sorted(lis, key=getKey)
[('a', 3), ('d', 3), ('f', 3), ('b', 2), ('c', 2)]

答案 1 :(得分:0)

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],它按数字排序,负号从最高到最低,然后我们断开与x[0]的关系,{{1}}从最低到高排序,即az自然。

`

答案 2 :(得分:0)

当你有一个嵌套元组的列表时,你不能通过查看这两个元素来sort它。在您的情况下,您可以按字母顺序或数字顺序sortkey方法的sort参数允许您指定要对数据进行排序的元组对中的哪个元素。

如果您想通过增加数字顺序进行排序:

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

如果您想通过减少数字顺序进行排序:

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

如果您想按字母顺序排序:

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参数允许您指定要排序的元组对的哪个元素。 您不能按字母和数字顺序排序。