Seite 1 von 1

Dictionary sortiert ausgeben.

Verfasst: Mittwoch 18. Februar 2015, 14:50
von nfehren
Hallo,
Ich weis, dass man ein Dictionary nicht sortieren kann, ich möchte es jedoch sortiert ausgeben. Aufgebaut ist es wie folgt:
{"name": [namedtuple(beispiel1='222", beispiel2 = '333'), versionskontrollsystem]}
Sprich ein Dictionary, das als Value eine Liste hat, dass ein namedtuple und einen string enthällt.

Jetzt möchte ich das Dictionary sortiert ausgeben. Aber nicht alphabetisch nach dem key namen sondern nach einem Wert aus dem namedtuple, zum Beispiel "beispiel1".

Wie realisiere ich das am Besten? Ich hoffe ich konnte meine Frage gut schildern, vielen Dank schonmal :)

Re: Dictionary sortiert ausgeben.

Verfasst: Mittwoch 18. Februar 2015, 14:53
von sparrow
Du kannst problemlos die die keys eines dicts sortieren, über die daraus resultierende Liste iterieren und die entsprechenden values passend zum Key aus dem dict abfragen.
Die krux in diesem Fall ist der Sortierschlüssel nach dem sortiert werden soll. Den kannst du aber bei sorted() problemlos mit angeben.
Für ein Beispiel braucht es aber mehr als einen Eintrag aus dem dict und eine konkrete Problemstellung.

Re: Dictionary sortiert ausgeben.

Verfasst: Mittwoch 18. Februar 2015, 14:59
von BlackJack
@nfehren: Am besten sortierst Du die Schlüssel/Wert-Paare (`dict.iteritems()` oder `dict.items()`) mit einem geeigneten `key`-Argument für `sorted()` oder `list.sort()`. Im Beispiel beispielsweise ``lambda x: x[1].beispiel1``.

Re: Dictionary sortiert ausgeben.

Verfasst: Mittwoch 18. Februar 2015, 15:13
von nfehren
BlackJack hat geschrieben:@nfehren: Am besten sortierst Du die Schlüssel/Wert-Paare (`dict.iteritems()` oder `dict.items()`) mit einem geeigneten `key`-Argument für `sorted()` oder `list.sort()`. Im Beispiel beispielsweise ``lambda x: x[1].beispiel1``.
Hat geklappt, super. Vielen Dank ;)

Re: Dictionary sortiert ausgeben.

Verfasst: Donnerstag 19. Februar 2015, 09:59
von nfehren
Ich hab jedoch jetzt ein anderes Problem. Es wird zwar nach dem richtigen Wert sortiert jedoch nicht der numerischen Größe nach. Das sieht dann zB so aus:


Package: odin | Rank: 5521 | Inst: 323 | Vote: 41 | Vcs: Git
Package: imagemagick | Rank: 56 | Inst: 704649 | Vote: 62376 | Vcs: Svn
Package: muscle | Rank: 5669 | Inst: 556 | Vote: 38 | Vcs: Svn
Package: tm-align | Rank: 5783 | Inst: 451 | Vote: 20 | Vcs: Svn
Package: ncbi-blast+ | Rank: 5857 | Inst: 363 | Vote: 43 | Vcs: Svn

(sortiert wird nach Rank)
muss ich noch ein Argument der sorted Funktion hinzufügen?

Re: Dictionary sortiert ausgeben.

Verfasst: Donnerstag 19. Februar 2015, 10:08
von JonasR
Der "Rank" ist scheinbar ein string, du musst ihn zu einem int umwandeln

Re: Dictionary sortiert ausgeben.

Verfasst: Donnerstag 19. Februar 2015, 10:09
von sparrow
Für das Sortieren die Zeichenketten in Zahlen wandeln:

Code: Alles auswählen

>>> d
['5521', '56', '5669', '5783', '5857']
>>> sorted(d)
['5521', '56', '5669', '5783', '5857']
>>> sorted(d, key=lambda x: int(x))
['56', '5521', '5669', '5783', '5857']

Re: Dictionary sortiert ausgeben.

Verfasst: Donnerstag 19. Februar 2015, 10:13
von nfehren
Super, funktioniert perfekt. Vielen Dank nochmal für die schnellen Antworten :)

Re: Dictionary sortiert ausgeben.

Verfasst: Donnerstag 19. Februar 2015, 10:28
von EyDu
Der Umweg ist über lambda ist nicht nötig, für den Schlüssel kann direkt int verwendet werden.

Code: Alles auswählen

sorted(d, key=int)