Mit Liste aus Namen auf Tabellenelemente zugreifen

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
sfthbara
User
Beiträge: 6
Registriert: Samstag 13. Juli 2019, 14:26

Hallo,
ich bin neu in Python und komme mit meinem Programm nicht weiter. Aus einem vorherigen Teil des Programms bekomme ich Tabellen ausgegeben und eine Liste table_head mit den Namen der Tabellen. Ein Problem ist, dass diese bei jedem Programmabruf variieren können und ich diese vorher nicht weiß. Anschließend füge ich an den String(table_head) die Elemente der Tabellen an, die ich nutzen möchte, indem table_head zu table_head_erweitert1 wird ('Ausgabetabelle_AAPL_[2][5]'). ( Daraufhin möchte ich die Tabellenstellen[2][5] aus allen Tabellen mit 'table_head_erweitert1' aufrufen und anschließen weiter nutzen. Meine Idee war es die Stellen als Liste von Floats in table_head2 zu speichern und diese Liste anschließend in [table_zeile.append(table_head2[j])] aufzurufen. Leider weiß ich nicht wie ich das Aufrufen der Tabellenelemente mit Hilfe der Namen bewertstelligen soll. bzw wie ich table_head_erweitert1 in table_head2 umwandeln kann.Table_head2 wurde hier vorerst manuell eingetragen. Die Werte sind vom Typ float.
Danke schonmal für eure Hilfe.


table_head=['Ausgabetabelle_AAPL', 'Ausgabetabelle_DLAKF']
liste_zeilen=[2,3]
table_zeile=[]
table_head_erweitert1=[]

i=0
while i<len(table_head):
table_head_erweitert1.append(table_head+'[a][5]')

i=i+1



table_head2=[Ausgabetabelle_AAPL[a][5], Ausgabetabelle_DLAKF[2][5]]


j=0
while j<len(table_head2):
table_zeile.append(table_head2[j])

j=j+1
i=i+1
table_vergleich.append(table_zeile)
table_zeile=[]
table_zeile=[]
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sfthbara: Variablennamen in einem Programm sind fest, die variieren nicht. Du suchst ziemlich sicher ein Wörterbuch (`dict`) und das sehr wahrscheinlich auch schon in dem Codeteil der Dir die variierenden Variablennamen beschert.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
sfthbara
User
Beiträge: 6
Registriert: Samstag 13. Juli 2019, 14:26

Ja, was ich meinte: Im Programmeil ( hier nicht gezeigt) werden unterschiedliche CSV-Datein ausgelesen und diese werden dann nach diesen benannt( Wie AAP oder DLAKF) und in der Liste table_head gesammelt. Da unterschiedliche Datein ausgelesen werden können, können so auch die Namen in der Liste variieren. Ich habe auch schon an ein Dict gedacht. Jedoch ist mir nicht ganz klar wie ich die Tabellen damit ansteuern soll.
ich bräuchte im Prinzip sowas wie:
for name in table_head_erweitert1:
table.append(open(name))
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sfthbara: Was wird in der Liste `table_head` gesammelt? Die *Listen* oder die *Namen* die sie im Code haben als Zeichenketten? Letzteres macht keinen Sinn. Wenn Du Namen brauchst, dann nimm wie gesagt ein Wörterbuch das diese Namen auf die entsprechenden Listen abbildet.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
sfthbara
User
Beiträge: 6
Registriert: Samstag 13. Juli 2019, 14:26

In der Liste werden die Tabellennamen gesammelt als String:
>>> table_head
['Ausgabetabelle_AAPL', 'Ausgabetabelle_DLAKF']

table_head_erweitert1:
['Ausgabetabelle_AAPL[2][5]', 'Ausgabetabelle_DLAKF[2][5]']

table_head=[Ausgabetabelle_AAPL[2][5], Ausgabetabelle_DLAKF[2][5]] -> manuell eingetragen, aber so würde ich das gerne haben.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sfthbara: Noch mal: Wörterbuch. Und `table_head_erweitert1` macht keinen Sinn. Das sind ja Zeichenketten und kein Code. Wenn Du nacheinander die Indexzugriffe auf das dritte und davon dann das sechste Element machen willst, dann brauchst Du nicht den Namen als Zeichenkette die Du durch etwas erweiterst was wie Code aussieht, sondern die Objekte die hinter den Namen stehen und da müsstest Du dann tatsächlich im Code die Indexzugriffe drauf anwenden. Wobei die magischen Indexwerte auch komisch riechen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
sfthbara
User
Beiträge: 6
Registriert: Samstag 13. Juli 2019, 14:26

Zur Erläuterung:Im Prinzip ist das eine Matrix: [0,1,2,3,4,5]
[0,1,2,3,4,5]
[0,1,2,3,4,5]
[0,1,2,3,4,5]
[0,1,2,3,4,5]
und ich nehme immer den Wert den letzten Wert aus der 3. Zeile.
vorher im Code erstelle ich den Namen auf diese Weise:
globals() ['Ausgabetabelle_'+title] = gesamt_tabelle_ausgabe
table_head.append('Ausgabetabelle_'+title) . ...
Wie genau sollte ich das dict erzeugen:
So?
d = dict()
a= table_head
for i in a:
for j in range(table_head):
a.append('[2][5]']
d[j].append(a)

Aber dann habe ich doch trotzdem auf beiden Seiten wieder einen String. Ich verstehe ehrlich gesagt nicht wie ich auf der Wertseite auf die Tabellenelemente zugreifen soll.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sfthbara: Äh, ja das mit dem `globals()` ist halt falsch, vergiss diesen Unsinn am besten sofort wieder. Du willst da nicht Namen im Modul erzeugen und damit das Modul als Wörterbuch missbrauchen sondern eben wirklich direkt ein Wörterbuch verwenden. Dann brauchst Du auch `table_head` nicht, denn in dem Wörterbuch stecken ja ausschliesslich Deine Tabellen, es gibt also keinen Grund sich irgendwo noch zusätzlich die Namen der Schlüssel auch noch in eine Liste zu schreiben. Und den 'Ausgabetabelle_'-Präfix brauchst Du auch nicht, denn Du musst die Werte nicht von anderen Namen wie im Modul unterscheiden. Die hätten da ja alle diesen Präfix im Wörterbuch, und damit ist das keine sinnvolle Information mehr. Das Wörterbuch selbst könntest Du an den Namen `ausgabetabellen` binden. Also statt der `globals()`-Zeile so:

Code: Alles auswählen

ausgabetabellen = dict()

# ...

ausgabetabellen[title] = gesamt_tabelle_ausgabe
Ansonsten solltest Du vor weiteren Fragen zu Wörterbüchern am besten mal ein Grundlagentutorial durcharbeiten. In der Python-Dokumentation gibt es zum Beispiel eines.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten