是否可以通过两个元素对两个元素元组的列表进行排序,但是其中一个元素反向排序?

问题描述 投票:0回答:2

我想对元组列表进行排序(元组的格式(整数,字符串)),以便它们从最大到最小整数排序,然后按字母顺序对字符串排序,而不会丢失整数顺序。

### Inputs: data = [(86, 'william'), (74, 'olivia'), (86, 'willaim'), (62, 'lyli'), (74, 'olivai'), (62, 'lily')]
### Outputs: data = [(86, 'willaim'), (86, 'william'), (74, 'olivai'), (74, 'olivia'), (62, 'lily'), (62, 'lyli')]
### What I know how to do: I know how to sort the tuples by specific element from greatest to least
import operator
data.sort(key = operator.itemgetter(0), reverse = True)
### This returns:
### data = [(86, 'william'), (86, 'willaim'), (74, 'olivia'), (74, 'olivai'), (62, 'lily'), (62, 'lyli')]
### At this point I'm not sure how to keep the integers ordered while sorting the strings alphabetically
python sorting tuples
2个回答
1
投票
data.sort(key=lambda x: (-x[0], x[1]))
如果您的键是一个元组,则排序算法将优先考虑该元组的第一个元素,然后是第二个元素,依此类推。

0
投票
Python的sort is stable,因此您可以按字符串

first排序,然后按整数排序。这将使整数按降序排列,但是具有相同整数的所有项从按字符串进行排序开始,将保持相同的相对顺序。

from operator import itemgetter data.sort(key=itemgetter(1)) data.sort(key=itemgetter(0), reverse=True)
这不像米哈伊尔·根金(Mikhail Genkin)的回答那样有效,但它更接近您想要做的事情。
© www.soinside.com 2019 - 2024. All rights reserved.