Seite 1 von 1
Sortierung von strings mit Umlauten
Verfasst: Samstag 6. Oktober 2012, 17:12
von JuSt611
Hallo,
leider bin ich noch nicht sehr erfahren in Python. Deshalb habe ich mit Google, Manual und Forumssuche keine Lösung für folgendes Problem gefunden: Wie kann ich eine solche Liste sortieren, so dass die Umlaute korrekt berücksichtigt werden:
Code: Alles auswählen
countries = ['\xc3\x96sterreich','Deutschland','D\xc3\xa4nemark','Ungarn']
countries.sort() ergibt die Reihenfolge ['Deutschland', 'D\xc3\xa4nemark', 'Ungarn', '\xc3\x96sterreich']
Die hex strings wurden durch die Lokalisierung automatisch aus den ursprünglich mit Umlauten vorhandenen strings erzeugt.
Gruß
JuSt
Re: Sortierung von strings mit Umlauten
Verfasst: Samstag 6. Oktober 2012, 17:30
von CasualCoding.org
Ich vermute, da wirst du dir eine eigene Funktion oder Methode schreiben müssen, die das erledigt.
Re: Sortierung von strings mit Umlauten
Verfasst: Samstag 6. Oktober 2012, 17:37
von anymagical
Hallo,
eine möglichkeit wäre es die Umlaute durch die entsprechenden Buchstabenkombinationen zu ersetzen. Da Ä,Ö und Ü werden immer nach dem 'Z' angezeigt.
Falls es darum geht die Länder einzugeben und auf den Komfort des Ä Ö und Ü nicht verzichtet werden soll, könnte man eine Funktion schreiben welche die Hexzahl durch ihre entsprechenden Buchstabenkombinationen ersetzt.
Vielleicht hat jemand der Pythonpro's noch einen guten Rat parat
Gruß
Anymagical
Re: Sortierung von strings mit Umlauten
Verfasst: Samstag 6. Oktober 2012, 19:03
von jerch
Code: Alles auswählen
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
'de_DE'
>>> countries = ['\xc3\x96sterreich','Deutschland','D\xc3\xa4nemark','Ungarn']
>>> sorted([i.decode('utf8') for i in countries], cmp=locale.strcoll)
[u'D\xe4nemark', u'Deutschland', u'\xd6sterreich', u'Ungarn']
Re: Sortierung von strings mit Umlauten
Verfasst: Samstag 6. Oktober 2012, 22:06
von JuSt611
Herzlichen Dank, jerch.
Ich habe mit Deiner Lösung noch mal gesucht und daraus diese vereinfachte Variante entwickelt:
Code: Alles auswählen
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
countries = ['\xc3\x96sterreich','Deutschland','D\xc3\xa4nemark','Ungarn']
countries.sort(key=locale.strxfrm)
print countries
['D\xc3\xa4nemark', 'Deutschland', '\xc3\x96sterreich', 'Ungarn']
Allerdings hatte ich mein Problem in der Fragestellung vereinfacht dargestellt. Tatsächlich möchte ich eine Liste von Listen sortieren. Das habe ich so gelöst (inkl. lunars Tipp, vielen Dank):
Code: Alles auswählen
import locale
#from operator import itemgetter
locale.setlocale(locale.LC_ALL, 'de_DE')
countries = [['\xc3\x96sterreich',1],['Deutschland',2],['D\xc3\xa4nemark',3],['Ungarn',4]]
#countries = sorted(countries, key=itemgetter(0), cmp=locale.strcoll)
countries.sort(key=lambda i: locale.strxfrm(i[0]))
print countries
[['D\xc3\xa4nemark', 3], ['Deutschland', 2], ['\xc3\x96sterreich', 1], ['Ungarn', 4]]
Gruß
JuSt
Re: Sortierung von strings mit Umlauten
Verfasst: Sonntag 7. Oktober 2012, 11:02
von lunar
Das "cmp"-Argument ist veraltet, und sollte nicht mehr verwendet werden.