按字母顺序(大小写敏感)排序元组列表
我有一个元组的列表
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),
2 个回答
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)]
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
前面,所以以小写字母开头的单词会排在以大写字母开头的单词前面。其他的单词则按照字母顺序进行排序。