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

Code: Alles auswählen

countries.sort(key=lambda i: locale.strxfrm(i[0]))
Das "cmp"-Argument ist veraltet, und sollte nicht mehr verwendet werden.