我正在尝试按字母顺序对列表进行排序,其中大写字母应该在小写字母之前。
l = ['a', 'b', 'B', 'A']
sorted(l)
应该会产生['A','a','B','b']
我尝试了这两种形式,但无济于事;
>>> sorted(l, key=lambda s: s.lower())
['a', 'A', 'b', 'B']
>>> sorted(l, key=str.lower)
['a', 'A', 'b', 'B']
答案 0 :(得分:11)
创建一个元组作为您的密钥:
>>> sorted(lst, key=lambda L: (L.lower(), L))
['A', 'a', 'B', 'b']
这意味着小写的排序顺序不会改变('a', 'a')
,但意味着大写的第一个键将其与小写等价物放在一起,然后在它之前排序:例如('a', 'A')
< ('a', 'a')
答案 1 :(得分:4)
有趣的是这样的列表应该如何排序以下列表
lst = ['abb', 'ABB', 'aBa', 'AbA']
建议的解决方案产生以下结果
>>> sorted(lst, key=lambda L: (L.lower(), L))
['AbA', 'aBa', 'ABB', 'abb']
我可以提出更复杂的解决方案,结果不同
>>> sorted(lst, key=lambda a: sum(([a[:i].lower(),
a[:i]] for i in range(1, len(a)+1)),[]))
['ABB', 'AbA', 'aBa', 'abb']