Python 按字母顺序对元组列表排序(区分大小写)
我有一个元组列表Python 按字母顺序对元组列表排序(区分大小写),python,list,sorting,tuples,Python,List,Sorting,Tuples,我有一个元组列表 alist = [(u'First', 23), (u'Second', 64),(u'last', 19)] 我想按字母顺序(区分大小写)排序,以获得以下信息: (u'last', 19), (u'First', 23), (u'Second', 64) (u'last', 19), (u'Second', 64), (u'First', 23), 我试过这个: sorted(alist, key=lambda x: x[0], reverse= True) 不幸的是
alist = [(u'First', 23), (u'Second', 64),(u'last', 19)]
我想按字母顺序(区分大小写)排序,以获得以下信息:
(u'last', 19), (u'First', 23), (u'Second', 64)
(u'last', 19), (u'Second', 64), (u'First', 23),
我试过这个:
sorted(alist, key=lambda x: x[0], reverse= True)
不幸的是,我明白了:
(u'last', 19), (u'First', 23), (u'Second', 64)
(u'last', 19), (u'Second', 64), (u'First', 23),
包括一个键,指示第一个字符是否为大写:
>>> 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
之前,因此小写首字母的单词将排序在大写首字母的单词之前。单词按字典顺序进行排序。定义您自己的排序功能:
字符通过其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)]
这将无法根据字符串中的第二个和后续字符进行正确排序。对于类似
last
和last
@NedBatchelder的情况,这将失败:这完全取决于OP对输入字符串中大写字符超过第一个的数据进行排序的期望。以及是什么使您的输出正确分类为什么不先排序“FirSt”
last?它的大写字母比'Second'
多。@MartijnPieters因为按字母顺序'S'
在'F'
之后,所以不需要检查其他字母。我的观点是这是您的解释。可能还有其他原因,我们没有足够的示例数据来确定这一点。