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 に答える