按字母顺序排列元组列表(区分大小写)

时间:2013-03-08 12:54:38

标签: python list sorting tuples

我有一个元组列表

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 :(得分: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)]

FalseTrue之前排序,因此具有小写首字母的单词将在具有大写首字母的单词之前排序。否则,词汇按字典顺序排序。

答案 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)]