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
Dictionary sortiert ausgeben.
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.
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.
@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 DankBlackJack 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``.
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?
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?
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']
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)
Das Leben ist wie ein Tennisball.