Die Gute Nachricht ist: das ist keine Anfängerfrage
Die Schlechte Nachricht ist: man kann unicode-zeichen
nicht eindeutig sortieren.
Und da im Python-zen (">>>import this") steht:
Tim Peters hat geschrieben:[...]
In the face of ambiguity, refuse the temptation to guess.
[...]
(Sinngemäß übersetzt: "Du sollst nicht raten"), gibt es keine Standardsortierung.
Du musst also selber sortieren - am besten über den Parameter"key=" von list.sort() bzw. sorted() und z.B. einem dict(u"A"=0, u"Ä"=???).
Es gibt noch "locale.strcoll()": das kann man als "cmp="-Parameter beim sortieren verwenden - dabei ergibt sich aber keine "Telefonbuch"-Sortierung
hth, Jörg
Edit: Ich bin davon ausgegangen, dass du die "Lexikon"- oder "Telefonbuch"-Sortierung (s.. wiki-Link) suchst - sonst geht natürlich "[u"A", u"z", u"Ä", u"ß"].sort()"
Edit II:
Für deutschen Text ist es einfacher als ich dachte:
Code: Alles auswählen
#!
# coding:utf-8
import itertools as it
from functools import partial
LEX_SORT = {u"Ä":u"A", u"Ö":u"O", u"Ü":u"U",
u"ä":u"a", u"ö":u"o", u"Ü":u"ü", u"ß":u"s",}
PHONEBK_SORT = {u"Ä":u"AE",u"Ö":u"OE",u"Ü":u"UE",
u"ä":u"ae", u"ö":u"oe", u"ü":u"ue", u"ß":u"ss",}
def rate_text(text, replacements = PHONEBK_SORT):
return "".join(replacements.get(c,c) for c in text)
if __name__ == "__main__":
examples = [u"Götz", u"Göbel", u"Goethe", u"Goldmann"]
for test_case, name in ((examples,"original"),
(sorted(examples),"builtin sort"),
(sorted(examples, key=rate_text),"phonebook style"),
(sorted(examples, key=partial(rate_text, replacements=LEX_SORT) ),
"dictionary style")):
print name
for word in test_case:
print word
print