Seite 1 von 1

Sortierung von verschachtelten namedtuples in einer Liste

Verfasst: Dienstag 19. November 2019, 21:40
von Kash
Hi,
ich habe eine Frage bezüglich der Sortierung von verschachtelten namedtuplets in einer Liste.
named tuples:
PolarCoordinate = collections.namedtuple('PolarCoordinate', ['r', 'phi'])
Node = collections.namedtuple('Node', ['id', 'polar_coordinate'])



Meine liste sieht nach einigen Berechnungen so aus:

p=[Node(id=0, polar_coordinate=PolarCoordinate(r=0.0, phi=0.0)), Node(id=1, polar_coordinate=PolarCoordinate(r=63.890531379853151, phi=0.87405404526488573)), Node(id=2, polar_coordinate=PolarCoordinate(r=38.910152916687437, phi=0.45215386228577559)), Node(id=3, polar_coordinate=PolarCoordinate(r=71.06335201775947, phi=0.68572951090628631)), Node(id=4, polar_coordinate=PolarCoordinate(r=58.523499553598128, phi=0.348771003583907))]

Nun möchte ich die Liste nach den "r" Werten sortieren.
ich hab das so versucht:
p.sort(key=lambda tup: tup('r'))

klappt aber nicht. wie kann ich die liste hier sortieren sodass die namedtuples in der liste aufsteigend nach "r" sortiert werden?

Danke für eure Hilfe

LG Kash

Re: Sortierung von verschachtelten namedtuples in einer Liste

Verfasst: Dienstag 19. November 2019, 21:59
von __deets__
Wie würdest du denn bei einem gegebenen Knoten auf r zugreifen?

Code: Alles auswählen

n = Node(...)[/node]

Re: Sortierung von verschachtelten namedtuples in einer Liste

Verfasst: Dienstag 19. November 2019, 22:02
von __blackjack__
@Kash: `tup` ist ein schlechter Name, einmal weil es eine Abkürzung ist, und dann weil es viel zu allgemein für einen Wert vom Typ `Node` ist. `node` wäre vielleicht ein passender Name.

Wie kommst Du auf die Idee das so ein `Node`-Objekt aufrufbar wäre? Und dann auch noch mit der Zeichenkette "r" als Argument‽ So ein `Node` kennt kein "r". So ein `Node` hat zwei Attribute. Und eines von den zweiten hat seinerseits ein Attribut das den Namen `r` trägt. Der übrigens auch ruhig `radius` heissen darf, weil auch `r` ist kein guter Name. Und `phi` würde ich in `angle` umtaufen. Denn `phi` ist ja eigentlich auch ein einbuchstabiger Name, nur das der eine griechische Buchstabe hier in lateinischen Buchstaben umschrieben wurde.