2 dimensionale Liste sortieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
flyingeagle
User
Beiträge: 22
Registriert: Freitag 21. Juli 2006, 12:12

Hallo,

ich benoetige eine zweidimensionale Liste bzw. ein Key-Wertepaar dass ich sortieren kann.

Hier ein paar Bsp.-Daten

Key => Value

2 => zweitens
3 => drittens
4 => viertens
...

So ich moechte nun dass ich eine Liste mit den Schluesseln und den Werten habe. Die Schluessel sind wirkliche Schluessel und existieren nur einmal.

Habe nun versucht das ganze per Dictionary zu loesen aber dass kann man ja nicht sortieren (soweit ich gelesen habe).

Kann mir vielleicht jemand helfen?

Gruss Martin
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

d=dict(a=1, c=2, b=3)
sorted(d.items())
flyingeagle
User
Beiträge: 22
Registriert: Freitag 21. Juli 2006, 12:12

Hi,

danke fuer die Antwort.

Klappt wunderbar mit der Sortierung. Kann ich die Sortierung nun auch andersrum machen? Also nicht aufsteigend sondern absteigend sortieren?
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Jep, reverse halt ;)

Code: Alles auswählen

>>> help(sorted)
Help on built-in function sorted in module __builtin__:

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
>>>
>>>sorted(d.items(),reverse=True)
[('c', 2), ('b', 3), ('a', 1)]
>>>
flyingeagle
User
Beiträge: 22
Registriert: Freitag 21. Juli 2006, 12:12

Ah :-)

danke vielmals. Hatte das mit dem reverse grade auch gefunden, wusste aber nicht wie ich den zweiten Parameter ueberspringen kann.


EDIT:
So nun habe ich es ausprobiert


Code: Alles auswählen


    for k, v in oDict.iteritems():
        oResultReg = re.search("^(\d+)", v["Nr"])

        if (oResultReg):

            nNr = int(oResultReg.group(1))
            
            if(not oResult.has_key(nNr)):
                oResult[nNr] = v["Nr"]


    sorted(oResult.items(),reverse=True)
leider habe ich immer noch die falsche reihenfolge.

statt 2, 1 wird immernoch 1, 2 angezeigt.

Gruss Martin
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Mein Senf:

Code: Alles auswählen

for k, v in oDict.iteritems(): 
    oResultReg = re.search("^(\d+)", v["Nr"]) 
    if (oResultReg): 
        nNr = int(oResultReg.group(1)) 
        # schreibt man besser so
        if nNr not in oResult: 
            oResult[nNr] = v["Nr"] 
#Rueckgabe nicht vergessen ;)
sortedResults = sorted(oResult.items(),reverse=True) 
flyingeagle
User
Beiträge: 22
Registriert: Freitag 21. Juli 2006, 12:12

Hi,

danke fuer die Anwtort.
Habe es gerade mit dem Rueckgabewert versucht. Das Ergebnis sieht aber auch nicht wirklich sortiert aus.

Gruss Martin
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Zeig doch mal ein print von deinem Dictionary.
flyingeagle
User
Beiträge: 22
Registriert: Freitag 21. Juli 2006, 12:12

Hi,

danke fuer eure Hilfe, hat natuerlich doch geklappt. Ich war nur etwas zu bloed um das Ergebnis richtig zu lesen ;).

Gruss Martin
Antworten