Seite 1 von 1

Elemente von Dictionary distict

Verfasst: Mittwoch 21. Juni 2017, 21:27
von Leny
Hallo an alle,

ich habe ein an sich triviales Problem,kann jedoch nicht nachvollziehen, warum es passiert.
all ist ein Dictionary (beispielsweise {'3': 2,5,1,2,2,2,8}). Ich möchte deren Element distinct bekommen. Dazu habe ich folgendes gemacht:

Code: Alles auswählen

dict={}    
for i in all:
    elementedistinct=set()
    liste=all[i]
    for j in liste:
        elementedistinct.add(liste[j])
dict[i]=elementedistinct
ich kriege in der letzten Schleife den Fehler: list index out of range. Ich verstehe gar nicht warum. Das Programm soll doch aus der Schleife raus, wenn die Liste durch ist. Ich würde mich über eure Hilfe freuen.
Vielen Dank im Voraus.

Leny

Re: Elemente von Dictionary distict

Verfasst: Mittwoch 21. Juni 2017, 21:40
von Sirius3
@Leny: for geht über die Elemente der Liste, die Du dann als Index in die Liste wieder verwendest. Darunter auch die 8, die bei der 7-Elementigen Liste eben zum Indexerror führt.
Das verwenden von Namen eingebauter Funktionen für Variablen ist sehr verwirrend. Das ganze als dict-Comprehension:

Code: Alles auswählen

distinc_dict = {
    key: set(values) for key, values in all.items()
}

Re: Elemente von Dictionary distict

Verfasst: Mittwoch 21. Juni 2017, 21:55
von Leny
Vielen Dank @Sirius3. Ich bin ein Anfänger im Python. Ich verstehe nicht so genau wie dein Code funktioniert. Könntest du bitte eine kurze Aufklärung mir geben.

Re: Elemente von Dictionary distict

Verfasst: Mittwoch 21. Juni 2017, 22:14
von __deets__
Dein code funktioniert nicht, weil du statt die Element der Liste in dein Set zu plazieren versuchst, auf die Liste selbst mit dem Element als Index zuzugreifen. Das geht natuerlich in die Hose:

Code: Alles auswählen

l = [100]
for element in l:
      print(element)
      print(l[element]) # KRACH, weil l nunmal keine 100 Eintraege hat, und wenn es das haette waere es katastrophal falsch!
      
Dein code zu reparieren bedeutet also einfach, j statt liste[j] als Argument an "add" zu uebergeben.

Und dann hat Sirius3 deinen Code noch verschoenert, indem er gleich eine dictionary comprehension verwandt hat. Diesen Begriff kann man googeln & nachlesen, was das ist.