Seite 1 von 1
Liste sortieren
Verfasst: Freitag 7. August 2009, 13:33
von Andyh
Hallo
Ich habe sowas:
Code: Alles auswählen
[
{
"feld_name" : "eingabe1",
"wichtig" : 1,
},
{
"feld_name" : "eingabe5",
"wichtig" : 5,
},
{
"feld_name" : "eingabe2",
"wichtig" : 2,
},
{
"feld_name" : "eingabe7",
"wichtig" : 7,
},
]
und brauche sowas:
der "key" "feld_name"(ACHTNUNG name ist variabel) muss nach "wichtig" sortiert werden
Außer seeehr komplexen Sachen fällt mir da nichts ein.
Da gibt sicher auch wieder was kitsch(geschicktes).
Gruß
Andyh
Verfasst: Freitag 7. August 2009, 13:39
von HerrHagen
Code: Alles auswählen
>>> x = [
{
"feld_name" : "eingabe1",
"wichtig" : 1,
},
{
"feld_name" : "eingabe5",
"wichtig" : 5,
},
{
"feld_name" : "eingabe2",
"wichtig" : 2,
},
{
"feld_name" : "eingabe7",
"wichtig" : 7,
},
]
>>> x
[{'wichtig': 1, 'feld_name': 'eingabe1'}, {'wichtig': 5, 'feld_name': 'eingabe5'}, {'wichtig': 2, 'feld_name': 'eingabe2'}, {'wichtig': 7, 'feld_name': 'eingabe7'}]
>>> sorted(x, lambda a, b: b["wichtig"] - a["wichtig"])
[{'wichtig': 7, 'feld_name': 'eingabe7'}, {'wichtig': 5, 'feld_name': 'eingabe5'}, {'wichtig': 2, 'feld_name': 'eingabe2'}, {'wichtig': 1, 'feld_name': 'eingabe1'}]
Verfasst: Freitag 7. August 2009, 13:40
von derdon
Code: Alles auswählen
>>> foo = [
... {
... "feld_name" : "eingabe1",
... "wichtig" : 1,
... },
... {
... "feld_name" : "eingabe5",
... "wichtig" : 5,
... },
... {
... "feld_name" : "eingabe2",
... "wichtig" : 2,
... },
... {
... "feld_name" : "eingabe7",
... "wichtig" : 7,
... },
... ]
>>>
>>> import operator as op
>>> for dic in sorted(foo, key=op.itemgetter("wichtig"), reverse=True):
... for key, value in dic.iteritems():
... if key == "feld_name":
... print value
...
eingabe7
eingabe5
eingabe2
eingabe1
Verfasst: Freitag 7. August 2009, 13:48
von Andyh
Hallo
Wahnsinn wie schnell das ging!
hab's mir fast gedacht das es so einen einfacheren weg gibt als das was ich mir da überlegt habe.
Besten Dank
Gruß
Andyh
Verfasst: Freitag 7. August 2009, 16:53
von sma
Wenn `e` für die Eingabedaten steht, dann
Code: Alles auswählen
print [o["feld_name"] for o in sorted(e, key=lambda o:o["wichtig"], reverse=True)]
Das ist etwas effizienter als die `cmp`-Funktion zu benutzen. Außerdem sollte ja eine Liste mit nur den Begriffen geliefert werden, daher das abschließende Filtern.
Stefan