Seite 1 von 1

Sortiren einer Liste von dictionaries die Listen enthalten.

Verfasst: Donnerstag 2. Februar 2012, 17:30
von HimbeerVanille
Hallo,

ich habe folge Ausgangslage:

ich habe eine Liste A bestehend aus dictionaries.
die dictionaries haben folgende Form:

Code: Alles auswählen

{'coordinates': (x, y, z), 'Name': 'Part-1-1', 'label': 1}
Jetzt möchte ich die Liste A sortieren zuerst nach dem kleinsten x, bei gleichem x nach y usw.

Bsp.:

Code: Alles auswählen

A=[{'coordinates': (1, 1, 0), 'Name': 'Part-1-1', 'label': 1}, 
{'coordinates': (2, 1, 0), 'Name': 'Part-1-1', 'label': 2}, 
{'coordinates': (1, 2, 0), 'Name': 'Part-1-1', 'label': 3}, 
{'coordinates': (2, 2, 0), 'Name': 'Part-1-1', 'label': 4}]
Ergebnis:

Code: Alles auswählen

A=[{'coordinates': (1, 1, 0), 'Name': 'Part-1-1', 'label': 1}, 
{'coordinates': (1, 2, 0), 'Name': 'Part-1-1', 'label': 3}, 
{'coordinates': (2, 1, 0), 'Name': 'Part-1-1', 'label': 2}, 
{'coordinates': (2, 2, 0), 'Name': 'Part-1-1', 'label': 4}]
Wie kann ich python sagen, dass er bei der Sortierung die Werte der Liste Coordinates benutzt?

Danke

Re: Sortiren einer Liste von dictionaries die Listen enthalt

Verfasst: Donnerstag 2. Februar 2012, 17:41
von deets
liste.sort(key=lambda d: d["coordinates"])

Re: Sortiren einer Liste von dictionaries die Listen enthalt

Verfasst: Donnerstag 2. Februar 2012, 17:42
von Hyperion
Du kannst der Funktion ``sorted`` eine Funktion übergeben, die einen "Vergleichswert" aus einer komplexeren Datenstruktur herausfiltert:

Code: Alles auswählen

>>> from pprint import pprint
>>> pprint(sorted(A, key=lambda d: d["coordinates"]))
[{'Name': 'Part-1-1', 'coordinates': (1, 1, 0), 'label': 1},
 {'Name': 'Part-1-1', 'coordinates': (1, 2, 0), 'label': 3},
 {'Name': 'Part-1-1', 'coordinates': (2, 1, 0), 'label': 2},
 {'Name': 'Part-1-1', 'coordinates': (2, 2, 0), 'label': 4}]
Edit: Ok, auf der ``sort``-methode von ``list`` funzt das natürlich genauso.

Re: Sortiren einer Liste von dictionaries die Listen enthalt

Verfasst: Donnerstag 2. Februar 2012, 18:12
von HimbeerVanille
Danke für eure schnellen Antworten. Ich werde es gleich mal ausprobieren.

Re: Sortiren einer Liste von dictionaries die Listen enthalt

Verfasst: Donnerstag 2. Februar 2012, 18:48
von derdon
Äquivalent funktioniert als `key`-Argument auch

Code: Alles auswählen

operator.itemgetter('coordinates')