我有一个元组列表
alist = [(u'First', 23), (u'Second', 64),(u'last', 19)]
我想按字母顺序排序(并区分大小写)以获得此结果:
(u'last', 19), (u'First', 23), (u'Second', 64)
我试过了:
sorted(alist, key=lambda x: x[0], reverse= True)
不幸的是我明白了:
(u'last', 19), (u'Second', 64), (u'First', 23),
答案 0 :(得分:9)
包含一个指示第一个字符是否为大写的键:
>>> sorted([(u'First', 23), (u'Second', 64),(u'last', 19)], key=lambda t: (t[0][0].isupper(), t[0]))
[(u'last', 19), (u'First', 23), (u'Second', 64)]
False
在True
之前排序,因此具有小写首字母的单词将在具有大写首字母的单词之前排序。否则,词汇按字典顺序排序。
答案 1 :(得分:0)
定义您自己的排序功能:
字符按其ascii值进行比较,因此'A'
(65)始终小于'a'
(97),但您可以通过返回'a'
的较小值来更改此值'A'
。
In [39]: lis=[(u'First', 23),(u'laSt',1), (u'Second', 64),(u'last', 19),(u'FirSt',5)]
In [40]: def mysort(x):
elem=x[0]
return [ord(x)-97 if x.islower() else ord(x) for x in elem]
....:
In [41]: sorted(lis,key=mysort)
Out[41]: [(u'last', 19), (u'laSt', 1), (u'First', 23), (u'FirSt', 5), (u'Second', 64)]