Sind Listen mit Unterlisten ohne int index möglich?

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
DerRobert
User
Beiträge: 2
Registriert: Montag 1. Juni 2015, 08:29

Montag 1. Juni 2015, 08:43

Hi Leute!

Ich versuche gerade python mittels eines Projektes zu lernen.
Auf folgendes Problem bin ich gestoßen bei dem ich nun schon tagelang anstehe:
Es wird aus Dateinamen eine Liste erstellt mit Strings (=Gruppe), die sich natürlich bei jeder Ausführung des Scripts ändern kann.
Es sollen Aufgrund dieser Gruppen- items andere Einträge unter diesen items gruppiert werden um gezählt werden zu können:

Code: Alles auswählen

Gruppenliste[ Gruppe1[ Eintrag1, Eintrag2 ], Gruppe2[ Eintrag1, Eintrag2, Eintrag3 ] ]
Wie am Beispiel gezeigt kann es vorkommen, dass eine Gruppe mehr Einträge hat als die andere, weswegen eine Matrix lt. meinen Recherchen nicht in Frage kommt - oder doch? :|
Erschwerend kommt hinzu, dass eben die Namen der Gruppen in der Gruppen-Liste als String vorliegen sollen um die weitere Verarbeitung zu vereinfachen - ist das möglich? :K

Bitte um euren Rat :)
Benutzeravatar
ngulam
User
Beiträge: 35
Registriert: Freitag 18. Oktober 2013, 11:03

Montag 1. Juni 2015, 08:58

sicher geht das (wenn ich die Frage verstanden habe :K )

würde hier ein dictionary anstelle einer Liste vorschlagen:

Code: Alles auswählen

In [13]: gruppenliste = {}
In [14]: gruppenliste['gruppe1'] = ['eintrag1', 'eintrag2']
In [15]: gruppenliste['gruppe2'] = ['eintrag1', 'eintrag2', 'eintrag3']
In [16]: gruppenliste
Out[16]: 
{'gruppe1': ['eintrag1', 'eintrag2'],
 'gruppe2': ['eintrag1', 'eintrag2', 'eintrag3']}
งูหลาม
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Montag 1. Juni 2015, 08:59

Moin,

hast du schon ein Python Tutorial gemacht? Dann müsstest du eigentlich ein Element kennen, das sich wie eine benamste Liste verhält.

@ngulam, gerade bei Anfängern, sollte man nicht immer gleich die komplette Lösung vorarbeiten
DerRobert
User
Beiträge: 2
Registriert: Montag 1. Juni 2015, 08:29

Montag 1. Juni 2015, 09:17

Danke für die Rückmeldungen!
Das Dictionary hatte ich mir wegen der String-indizes schon angesehen, aufgrund der Doku (https://docs.python.org/2/tutorial/data ... ctionaries) hat sich mir nicht eröffnet, dass man auch Listen in Dictionaries einbauen kann.
Beim Versuch sie im Script zu verwenden hat das auch nicht geklappt weswegen ich mich schlussendlich an Euch gewendet habe.
Ich werd's gleich nochmal testen - vielleicht war ja ein anderer Fehler schuld dran…

Danke nochmals - echt lässig wie schnell und kompetent hier geantwortet wird! :)

edit:
Sieht aus, als ob es funktionieren würde :)
Benutzeravatar
snafu
User
Beiträge: 6075
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Montag 1. Juni 2015, 12:09

@DerRobert: Als Werte kann man in einem Dictionary beliebige Objekte verwenden. Es gibt nur bei den Schlüsseln die Einschränkung, dass der Objekttyp hashbar sein muss. Man kann daher eine Liste nicht als Schlüssel nehmen, aber als Wert eben schon.

Und falls man doch mal etwas "listenartiges" für den Schlüssel verwenden möchte, dann bieten sich Tupel als Alternative an. Tupel sind nämlich hashbar.
Zuletzt geändert von snafu am Montag 1. Juni 2015, 12:11, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Montag 1. Juni 2015, 12:11

Du kannst bei einem Dictionary *jedes hashbare* Objekt als Schlüssel nehmen; also nicht nur Strings! Z.B. geht das auch für boolesche Werte:

Code: Alles auswählen

print({True: "wahr", False: "falsch"}[False])
> falsch
Edit: snafu war schneller, ich poste das aber aufgrund des schönen Beispiels dennoch :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten