0

我需要对一些字典键进行排序,以便 u"/" 字符位于末尾。当使用非 unicode 字符串时,我使用了一个函数:

>>> L = ["/", "C", "b", "A"]
>>> sorted(L, key=lambda item: item.lower() if item != "/" else tuple())
['A', 'b', 'C', '/']

这使用(滥用?)元组在 python 中的字符串之后排序的事实。但是 unicode 字符串在元组之后排序,所以如果键是 unicode,这将不起作用。所以,例如,

>>> L = [u"/", u"C", u"b", u"A"]
>>> sorted(L, key=lambda item: item.lower() if item != u"/" else tuple())
[u'/', u'A', u'b', u'C']
  • unicode 类型后排序了哪些对象?
  • 有没有更好的方法来做到这一点?
4

2 回答 2

4

返回一个保证最后排序的 unicode 字符sys.maxunicode::

sorted(L, key=lambda item: item.lower() if item != u"/" else sys.maxunicode)
于 2012-12-05T13:00:13.687 回答
4

您不必混合类型或使用特殊的排序键:在所有情况下只需使用元组作为键:

sorted(L, key=lambda item: (item == "/", item.lower()))

这意味着“/”是键控的,(True, "/")而所有其他字符串都是(False, "...whatever...")

于 2012-12-05T13:05:43.423 回答