Python 如何对列表进行排序,以将所有小写字母置于大写字母之前?
我遵循了这一点,并尝试了各种可能性以获得所需的输出Python 如何对列表进行排序,以将所有小写字母置于大写字母之前?,python,sorting,Python,Sorting,我遵循了这一点,并尝试了各种可能性以获得所需的输出 sorted(['aa', 'bb', '_dd', 'BB', 'AA']) ['AA', 'BB', '_dd', 'aa', 'bb'] sorted(['aa', 'bb', '_dd', 'BB', 'AA'], reverse=True) ['bb', 'aa', '_dd', 'BB', 'AA'] sorted(['aa', 'bb', '_dd', 'BB', 'AA'], key=str.lower) ['_dd', '
sorted(['aa', 'bb', '_dd', 'BB', 'AA'])
['AA', 'BB', '_dd', 'aa', 'bb']
sorted(['aa', 'bb', '_dd', 'BB', 'AA'], reverse=True)
['bb', 'aa', '_dd', 'BB', 'AA']
sorted(['aa', 'bb', '_dd', 'BB', 'AA'], key=str.lower)
['_dd', 'aa', 'AA', 'bb', 'BB']
sorted(['aa', 'bb', '_dd', 'BB', 'AA'], reverse=True, key=str.lower)
['bb', 'BB', 'aa', 'AA', '_dd']
sorted(sorted(['aa', 'bb', '_dd', 'BB', 'AA'], reverse=False), key=str.lower)
['_dd', 'AA', 'aa', 'BB', 'bb']
sorted(sorted(['aa', 'bb', '_dd', 'BB', 'AA'], reverse=True), key=str.lower)
['_dd', 'aa', 'AA', 'bb', 'BB']
sorted(sorted(['aa', 'bb', '_dd', 'BB', 'AA'], reverse=True), key=lambda x: (x.lower(), x.swapcase()))
['_dd', 'aa', 'AA', 'bb', 'BB']
sorted(['aa', 'bb', '_dd', 'BB', 'AA'], key=str.istitle)
['aa', 'bb', '_dd', 'BB', 'AA']
sorted(['aa', 'bb', '_dd', 'BB', 'AA'], reverse=True, key=str.istitle)
['aa', 'bb', '_dd', 'BB', 'AA']
sorted(['aa', 'bb', '_dd', 'BB', 'AA'], reverse=False, key=str.istitle)
['aa', 'bb', '_dd', 'BB', 'AA']
sorted(sorted(['aa', 'bb', '_dd', 'BB', 'AA']), key=str.istitle)
['AA', 'BB', '_dd', 'aa', 'bb']
sorted(sorted(['aa', 'bb', '_dd', 'BB', 'AA'], reverse=True), key=str.istitle)
['bb', 'aa', '_dd', 'BB', 'AA']
但我需要输出的顺序是这样的
['_dd', 'aa', 'bb', 'AA', 'BB']
试试这个:
sorted(['aa', 'bb', '_dd', 'BB', 'AA'], key=lambda s: (s.upper() == s, s))
元组按第一项排序在第二项之前,bool按False排序在true之前,因此s.upper()==s
将所有非大写元组排序在其他元组之前
请注意,如果您的目的是面向语言的排序,您可能应该考虑使用key=functools.cmp\u to\u key(locale.strcoll)
或类似的方法。也许:key=lambda s:(s.isalpha(),s.swapcase())
是的,它起作用了<代码>已排序(已排序(['aa','bb','u dd','bb','aa']),key=lambda s:(s.isalpha(),s.swapcase())