Seite 1 von 1
Listen verschachteln
Verfasst: Sonntag 29. Oktober 2017, 13:05
von djevil
Hi, ich versuche gerade ein paar Listen zu verschachteln,
(Es muss nicht unbedingt eine Liste sein)
Jedenfalls funktioniert es gerade nicht so wie gedacht, bspw.:
Code: Alles auswählen
Groups = ["Media", "Games", "Music", "Graphics", "Tools"]
Media= ["Firefox", "Kodi" ]
% for g in Groups:
<h2>{{ g }}</h2>
% for a in g:
<div >
<h2>{{ a }} </h2>
wobei mit {{ g }} die Gruppen korrekt ausgegen werden.
Und analog dazu sollte {{ a }} die Elemente von Media ausgeben, was nun nicht funktioniert, da g ein String und keine Liste mehr ist.
Wie kann ich eine derartige Ausgabe am sinnvollsten darstellen?
MFG djevil
Re: Listen verschachteln
Verfasst: Sonntag 29. Oktober 2017, 13:57
von nezzcarth
djevil hat geschrieben:
Und analog dazu sollte {{ a }} die Elemente von Media ausgeben, was nun nicht funktioniert, da g ein String und keine Liste mehr ist.
"g" war nie eine Liste. "Media" in Zeile eins ist ein String, Media in Zeile drei ist ein Name. Die beiden sind völlig unabhängig von einander. Ich weiß nicht genau, was das Template-System, das du da verwendest im Hintergrund tut, aber in "normalem" Python gibt es keine Mechanik, die das, was du da versuchst (mit einer Zeichenkette auf ein gleichnamiges Objekt zugreifen), so erlaubt. Gibt es für "Games", "Music" etc. auch entsprechende Listen?
Dann würde vermutlich man ein Dictionary nehmen, bei dem die Schlüssel die Elemente der Liste Groups sind und die Elemente von Media etc. die Werte des jeweiligen Schlüssels.
EDIT:
In gewöhnlichem Python sähe das dann etwa so aus:
Code: Alles auswählen
groups = {'Media': ['Firefox', 'Kodi'], 'Games': ['a', 'b', 'c']}
for key, values in groups.items():
print('Group:', key)
for value in values:
print(value)
Re: Listen verschachteln
Verfasst: Sonntag 29. Oktober 2017, 14:09
von djevil
Ok, ich meinte g repraesentiert die Werte der Liste Groups...
Re: Listen verschachteln
Verfasst: Sonntag 29. Oktober 2017, 14:14
von __deets__
Das gibt so keinen Sinn. Was soll denn am Ende da stehen?
Re: Listen verschachteln
Verfasst: Sonntag 29. Oktober 2017, 15:37
von djevil
Habe es jetzt so geloest, geht aber bestimmt noch schoener
Code: Alles auswählen
Apps = {
"Firefox" : ["Firefox", "firefox", "/usr/bin/firefox"],
"Kodi" : ["Kodi", "kodi", "/usr/bin/kodi"],
"Dolphin-emu": ["Dolphin-emu", "Emu", "/usr/games/dolphin-emu"]
}
Groups = {
'Media': ['Firefox', 'Kodi'],
'Games': ['Dolphin-emu', 'PCSX2', 'N64'] ,
}
for key, values in Groups.items():
print('Group:', key, "\n")
for value in values:
print(value)
print("-------")
for app, paths in Apps.items():
if app == value:
print(*paths[1], sep="")
print(*paths[2], sep="")
print("\n")
Re: Listen verschachteln
Verfasst: Sonntag 29. Oktober 2017, 15:46
von __deets__
Statt über Apps zu iterieren kannst du doch gleich drauf zugreifen.
Und die Liste von werten für deine Apps ist IMHO falsch. Auch das sollte ein dict sein, oder gar ein namedtuple. Denn das Index 0 dieses und Index 2 jenes ist, vergisst du spätestens in zwei Wochen. Wenn du aber Schlüssel ‚Name‘ und ‚Executable‘ hast ist das selbsterklärend.
Re: Listen verschachteln
Verfasst: Sonntag 29. Oktober 2017, 17:20
von djevil
Jetzt hab ich so:
Code: Alles auswählen
for key, values in Groups.items():
print('Group:', key, "\n")
for value in values:
print('Value: ', value)
if value in Apps[value]['name']:
print(Apps[value]['path'])
Sieht schon besser aus
