Seite 1 von 1

Dictionary wird als Liste erkannt

Verfasst: Freitag 23. Januar 2026, 11:25
von Dan813
Sehr geehrte Damen und Herren,
ich habe das Problem, dass ein Dictionary "synonyms" in einer Methode "removeSynonym" als Liste erkannt wird und die Funktion get() somit nicht funktioniert:
Mein Code:
...
class Words():

def __init__(self):
self.words=[]
self.found=[]
self.unit=[]
self.isynonym=[]
self.synonyms={}

def deleteSynonym(self,word,keyword):
i=0
for synonym in self.getSynonyms(keyword):
if (synonym==word):
break
i+=1
del self.synonyms[keyword]

def getIsyononym(self):
return self.isynonym

def getSynonyms(self,key):
return self.synonyms.get(key,[])

Ich bekomme jetzt folgende Fehlermeldung:

Traceback (most recent call last):
File "d:\Projects\VocabularySystem\VocabularySystem.py", line 391, in checkInput
self.compare()
File "d:\Projects\VocabularySystem\VocabularySystem.py", line 362, in compare
if(self.words.compareSynonyms(self.input,self._German)):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "d:\Projects\VocabularySystem\VocabularySystem.py", line 219, in compareSynonyms
self.deleteSynonym(word,keyword)
File "d:\Projects\VocabularySystem\VocabularySystem.py", line 199, in deleteSynonym
for synonym in self.getSynonyms(keyword):
^^^^^^^^^^^^^^^^^^^^^^^^^
File "d:\Projects\VocabularySystem\VocabularySystem.py", line 209, in getSynonyms
return self.synonyms.get(key,[])
^^^^^^^^^^^^^^^^^
AttributeError: 'list' object has no attribute 'get'

Die von DeleteSynonym aufgerufene Funktion getSynonyms interpretiert fälschlicherweise synonyms als Liste und nicht als Dictionary, wie es eigentlich deklariert war.
Im nicht sichtbaren Code gibt es keine entsprechende Variable synonyms.
Ich bitte dringend um Ihre Hilfe!!!

PS:
Es hat schon mal einwandfrei funktioniert, bis ich anderweitigen Code, der aber nichts damit zu tun hat, abgeändert habe!

Re: Dictionary wird als Liste erkannt

Verfasst: Samstag 24. Januar 2026, 13:15
von Sirius3
Leerzeichen um Operatoren und nach Kommata erhöhen die Lesbarkeit erheblich. `isynonym` ist einschlechter Name, weil das i keinerlei Aussagekraft hat.
Methodennamen (wie auch Variablen) schreibt man komplett klein.
if ist keine Funktion, braucht also keine Klammern.
getIsynonym ist überflüssig, weil man auch direkt auf isynonym zugreifen kann.
In deleteSynonym wird ein Index händisch gezählt. Dafür gibt es aber `enumerate` oder besser gar keinen Index benutzen. In diesm Fall einfach

Code: Alles auswählen

self.synonyms[keyword].remove(word)
Zum eigentlichen Problem: im Code, den Du nicht zeigst, wirst Du wohl synonyms mit einer Liste überschreiben.

Re: Dictionary wird als Liste erkannt

Verfasst: Samstag 24. Januar 2026, 13:39
von noisefloor
Hallo,
Der F
ergänzende zu sirius3:
Die von DeleteSynonym aufgerufene Funktion getSynonyms interpretiert fälschlicherweise synonyms als Liste und nicht als Dictionary,
Das passiert nicht. Nie. Jedes Objekt in Python hat einen Typen, kannst du z.B. mit `type(OBJEKTNAME)` abfragen. Python "rät" nichts bei bestehenden Objekten. Der Fehler muss in deinem Code liegen.

Beim nächsten Mal bitte den Code in einem Codeblock posten zwecks Lesbarkeit. Einen Codeblock fügst du ein, indem du den vollständigen Editor beim Posten aufrufst und dann auf das "</>" Symbol klickst. Und bitte den vollständigen Code hochladen oder so weit reduzieren, dass auf jeden Fall der relevante Teil drin ist und die Zeilennummer der Fehlermeldung 1:1 der Zeilennummer des gezeigten Codes entspricht, Die Fehlermeldung spricht von Zeile 209, so lang ist der gepostet Code gar nicht. Des Weiteren wird im gezeigten Code gar nicht die `Words` Klasse instanziert.

Gruß, noisefloor

Re: Dictionary wird als Liste erkannt

Verfasst: Samstag 24. Januar 2026, 13:40
von Dennis89
Hallo,

das ist deine Funktion:

Code: Alles auswählen

def getSynonyms(self,key):
    return self.synonyms.get(key, [])
Weißt du, wozu das 2. Argument in `get` zuständig ist?
Du wirst vermutlich einen Schlüssel übergeben, der nicht im Wörterbuch ist und bekommst dann eben eine Liste zurück.

Die Änderung an deinem Code den du nicht zeigst, wirst du wohl nicht vorhandene Schlüssel übergeben.

Grüße
Dennis

Re: Dictionary wird als Liste erkannt

Verfasst: Samstag 24. Januar 2026, 16:16
von Dan813
Sehr geehrte Damen und Herren,

erst mal vielen Dank für die sehr guten Beiträge zur Verbesserung meines Codes.
Ich habe tatsächlich eine Zeile im nicht sichtbaren Code übersehen, welche "synonyms" als Liste überschreibt!
Damit ist mein Problem gelöst!
Vielen Dank nochmals für diese produktive Hilfestellung!

Liebe Grüße

Dan813