Namen bilden von Elementen in Listen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
peterwoodbridge
User
Beiträge: 50
Registriert: Freitag 30. November 2012, 10:26

Guten Morgen

Leider habe ich nicht den gesamten Code vor mir. Aber ich versuch dennoch, das aufgetretene Problem zu beschreiben.

Ich habe eine Klasse "Passagiere"
Class Passagier(self, vorname, nachname, aktuell=False):

(aktuell bedeutet, ob er heute fliegt (True) oder obs ein Passagier aus der Vergangenheit war)

nun kann ich Passagiere problemlos eingeben; zB = HP = Passagier("Heinz", "Polenta", True)

wenn ich nun eine Liste habe mit Passagiernamen: DeltaAirlines = ["Adalbert Konrad", "Pablo, Picasso"], wie kann ich nun diese einzelnen Elemente in dieser Liste als Passagiere speichern, so dass sie dieselben Eigenschaften bekommen, wie wenn ich AK = Passagier("Adalbert", "Konrad") schreibe?

Und wenn ich nicht will, dass der Passagier AK heisst, sondern Passagier1, wie würde das funktionieren?

Im Verlaufe des Tages werde ich wohl noch mit einer anderen Frage auftauchen. Ich hoffe sehr, dass hier jemand mir helfen kann.

Mfg
PW


PS: Zusatzfrage: ich habe mal ein Dictionary erstellt. Zuerst fragte ich nach, wieviele Keys zu erstellen sind; nachher gab ich jeweils Namen für diese Keys und bearbeitete dann Werte eingefügt, die in Form einer Liste ist. Dies hat perfekt funktioniert, allerdings als ich dann das Dictionary abgerufen habe, waren die Keys relativ unsortiert (die dazugehörige Liste stimmt aber).

Also zB:
keyname1: "hausMünchen" ["rot", "174 quadratmeter", "zu vermieten]
keyname2: "hausDortmund" ["blau", "verkauft"]
keyname3: "hausBerlin" ["gelb"]

dictionary = {hausBerlin: ["gelb"], hausMünchen: ["rot", "174 quadratmeter", "zu vermieten], hausDortmund: ["blau", "verkauft"] }

An was liegt das?
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Zu Frage 1: Wenn du eine Liste mit Passagiernamen hast, dann kannst du die einzelnen Einträge in einer for-Schleife "abfragen" und in deren Rumpf genau das machen was du jetzt tust und anschließend das erstellte Objekt zum Beispiel an eine neue Liste anhängen.
Wenn du nicht möchtest, dass das Objekt an den Namen AK gebunden wird, dann benutze Passagier1? Aber das binden an einen Namen erübrigt sich, wenn du das Objekt direkt an eine Liste anhängst.

Zu Frage 2: dictionaries sind immer unsortiert. Sie sollen den Zugriff auf Elemente über einen Schlüssel sicherstellen, nicht deren Reihenfolge. Listen und Tuple sind hingegen behalten immer ihre Reihenfolge bei.
In collections findet man OrderedDict das Sortierung unterstützt.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

peterwoodbridge hat geschrieben:Und wenn ich nicht will, dass der Passagier AK heisst, sondern Passagier1, wie würde das funktionieren?
Wenn ich Dich richtig verstehe, möchtest Du eine Struktur, innerhalb derer Du eine Airline abfragen kannst und hierzu eine Liste von Passagieren, geordnet nach deren Erstellung, erhältst? Dazu musst Du keine nummerierten Namen à la 'passenger01', 'passenger02' etc. verwenden sondern kannst über den Index einer Liste zugreifen:

Code: Alles auswählen

class Passenger(object):
    def __init__(self, firstname, surname):
        self.firstname = firstname
        self.surname = surname

    def __str__(self):
        return 'Passenger {0}, {1}'.format(self.surname, self.firstname)

Code: Alles auswählen

>>> airlines = {'delta': []}  #collections.defaultdict
>>> airlines['delta'].append(Passenger('Heinz', 'Polenta'))
>>> airlines['delta'].append(Passenger('Pablo', 'Picasso'))
>>> airlines['delta'].append(Passenger('Adalbert', 'Konrad'))
>>> airlines['delta']
[<passenger.Passenger object at 0x7f7551e48a10>, <passenger.Passenger object at 0x7f7551e48910>, <passenger.Passenger object at 0x7f7551e48a50>]
>>> print airlines['delta'][0]
Passenger Polenta, Heinz
>>> print airlines['delta'][1]
Passenger Picasso, Pablo
>>> print airlines['delta'][2]
Passenger Konrad, Adalbert
Und wenn Du Deiner Klasse 'Passenger' noch eine Suchmethode spendierst, kann Du beim Iterieren über alle Passagiere einer Airline auch das herausfiltern, was Dich interessiert.
Wenn das ganze aber eine bestimmte Dimension annimmt, sollte man sich über die Verwendung einer Datenbank Gedanken machen...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@peterwoodbridge: Frage 1 klingt so ein bisschen danach als wolltest Du Variablennamen dynamisch generieren — das sollte man nicht machen. Dafür gibt es Wörterbücher (`dict`), und falls die generierten Namen immer der gleiche, aber „durchnummeriert” sein sollten, wurde hier ja schon auf Listen verwiesen.
Antworten