Seite 1 von 1

dictionary mit list-elementen befüllen

Verfasst: Donnerstag 22. April 2021, 18:17
von alX1111
Hallo zusammen,
ich versuche, ein dictionary mit den Elementen einer Liste zu befüllen und danach auszugeben.
Es wäre saunett, wenn jemand mir kurz meine(n) Fehler erklären könnte!

Im Prinzip überprüfe ich mit folgendem kurzen Code, ob in einer Liste Elemente doppelt vorkommen und wenn ja, gibt die Funktion das erste solche Element zurück.
Dazu überprüfe ich, ob das betreffende Element bereits im Dictionary ist und schreibe es andernfalls rein...
Zwei Fragen:
- Warum funktioniert die Anweisung in Zeile 8 als Alternative zu Zeile 7 nicht? Sollte doch eigentlich dasselbe machen...
- Wie schaffe ich es, das erstellte und gefüllte dictionary auszugeben? Wollte das in Zeile 9 machen...


1 def duplicate(array):
2 hashy = {}

3 for index in array:
4 if hashy.get(index):
5 return index
6 else:
7 hashy[index] = True
8 #hashy.udpate({index: 'True'})
9 #print(hashy)

10 print(duplicate(["a", "b", "c", "d", "c", "e", "f"]))


Also, falls jemand kurz die Zeit für diese Fragen findet, würd ich mich freuen!

Re: dictionary mit list-elementen befüllen

Verfasst: Donnerstag 22. April 2021, 19:01
von Sirius3
Eingerückt wird mit 4 Leerzeichen pro Ebene, nicht 3.
Das was Du array nennst, ist eine Liste. Da die Funktion aber mit jedem iterierbaren Objekt arbeiten kann, würde man das gar nicht mit dem Namen so einschränken.
Das was Du `index` nennst, ist auch kein Index, sondern ein allgemeines Element.
Da Du mit dem Ergebnis von get gar nichts machst, willst Du wahrscheinlich nur den in-Operator verwenden.
Wenn man ein Element eines Wörterbuchs setzen will, benutzt man nicht update, was aber theoretisch auch funktionieren sollte, wenn es richtig geschrieben wäre.
Das `print` wird nie erreicht, weil Du die Schleife per `return` verläßt, und damit die Funktion.

Aber da Du den Wert des Wörterbuchs eh nicht brauchst, willst Du eigentlich ein `set` verwenden.

Code: Alles auswählen

def duplicate(iterable):
    seen = set()
    for item in iterable:
        if item in seen:
            break
        seen.add(item)
    print(seen)
    return item  

print(duplicate(["a", "b", "c", "d", "c", "e", "f"]))

Re: dictionary mit list-elementen befüllen

Verfasst: Donnerstag 22. April 2021, 20:15
von __blackjack__
Den Randfall, das `iterable` leer ist könnte man noch anders lösen als den impliziten `NameError`/`UnboundLocalError`.

Re: dictionary mit list-elementen befüllen

Verfasst: Freitag 23. April 2021, 18:53
von alX1111
Vielen Dank!!!

Re: dictionary mit list-elementen befüllen

Verfasst: Samstag 24. April 2021, 09:49
von Sirius3
Der Code hat noch den weiteren Fehler, falls es keine doppelten Einträge gibt.

Code: Alles auswählen

def duplicate(iterable):
    seen = set()
    for item in iterable:
        if item in seen:
            break
        seen.add(item)
    else:
        raise ValueError("keine doppelten Einträge")
    print(seen)
    return item  

print(duplicate(["a", "b", "c", "d", "c", "e", "f"]))