Seite 1 von 2
In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 09:43
von _corn_
Guten Tag Zusammen,
ich stelle mich momentan folgendes Problem: Ich möchte gerne Nummern aus einem Dictionary mit einem festgelegt Wert vergleichen, ob dieser z.B. größer ist: Mein Code sieht momentan wie folgt aus:
Code: Alles auswählen
import csv
def read_number():
with open('Datei.csv', encoding='utf-8', newline='', as csv_input:
reader = csv.DictReader(csv_input, delimiter=';')
lookup_number = {}
for row in reader:
lookup_number[row['Nummer']] = row
return lookup_number
def main():
number = read_number()
for row in number:
if number > 1:
#und dann würde es hier weiter gehen
if __name__ == "__main__":
main()
Momentan wirft er mir so den Fehler raus:"TypeError: '>' not supported between instances of 'dict' and 'int'". Wenn ich das gleiche mit = oder != 1 mache, funktioniert es. Kann ich > und < trotzdem irgendwie verwendet oder gibt es einen alternativen Weg? Vielen Dank schonmal im Vorraus für die Antworten.
LG Corn
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 09:43
von _corn_
Und nicht wundern, die Einrückung wurde hier irgendwie nicht richtig übernommen: Bei mir ist sie richtig mit 4 Leerzeichen

Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 10:23
von rogerb
@_corn_,
du verwendest TAB zum Einrücken, besser wären 4 Leerzeichen.
In der Zeile:
if number > 1
ist number ein Dictionary, so wie er von der Funktion read_number() zurückgegeben wurde.
Du willst wahrscheinlich:
Code: Alles auswählen
numbers = read_number()
for number in numbers.values():
if number > 1:
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 10:33
von _corn_
Mir wird da leider der Fehlercode '>' not supported between instances of 'dict' and 'int' herausgegeben @rogerb
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 10:38
von __deets__
Du vergleichst ein Wörterbuch mit einer Zahl. Was erwartest du denn dann? Wenn ich dir einen Duden in die Hand drücke, und sage, “ist der kleiner 100”, hast du da eine sinnvolle Antwort?
Du musst dir klarmachen, was du da aus read_number() bekommst, und wie das sinnvoll zu verarbeiten ist.
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 10:39
von rogerb
_corn_ hat geschrieben: Freitag 3. Dezember 2021, 10:33
Mir wird da leider der Fehlercode '>' not supported between instances of 'dict' and 'int' herausgegeben @rogerb
Wie sieht denn dein Code jetzt nach der Änderung aus?
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 10:57
von _corn_
@__deets__ Nein natürlich hätte ich da keine sinvolle Antwort, aber das ist doch auch nicht wonach ich frage oder zumindest fragen will? Wenn du mir ein Duden in die Hand drückst und sagst: "Auf Seite 1 steht ein Eintrag und der ist "2". Dann kann ich dir eine sinnvolle Antwort geben.
vielleicht habe ich auch ein Denkfehler, aber ich bekomme aus lookup_number eine Zahl heraus: Also einen Eintrag der z.B. wie folgt aussieht: 2 : {'Key1':'Datensatz1, 'Key2':'Datensatz2, 'Nummer':'2'}. Kann ich dann nicht fragen, ob der Eintrag also '2' > 1 ist?
Und wenn ich die Abfrage falsch formuliere, wie muss ich sie dann formulieren?
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 11:03
von __deets__
Du selbst sagst, damit das sinnvoll wird, musst du einen bestimmten Eintrag nachschlagen, und dann lässt sich die Frage beantworten.
Wo ist diese Nachschlageoperation denn in deinem Code? Woher soll Python wissen, welcher deiner 3 Einträge der zu vergleichende ist? Das wirst du schon angeben müssen.
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 11:05
von rogerb
_corn_ hat geschrieben: Freitag 3. Dezember 2021, 10:57
Und wenn ich die Abfrage falsch formuliere, wie muss ich sie dann formulieren?
Das hatte ich doch geposted. Hast du das richtig umgesetzt?
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 11:09
von _corn_
@rogerb ja, habe ich so ausprobiert:
Code: Alles auswählen
def read_number():
with open('Datei.csv', encoding='utf-8', newline='') as csv_input:
reader = csv.DictReader(csv_input, delimiter=';')
lookup_number = {}
for row in reader:
lookup_number[row['Nummer']] = row
return lookup_number
def main():
numbers = read_number()
print(numbers)
for number in numbers.values():
if number > 1:
print("Geht")
if __name__ == "__main__":
main()
Dabei kommt dann folgende Fehlermeldung: TypeError: '>' not supported between instances of 'dict' and 'int'
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 11:18
von rogerb
@_corn_,
das was in der read_number() Funktion "row" enthält, kommt in der main() Funktion in die Variable "number". Wenn das ein Dictionary ist, entsteht der Fehler.
Was ist denn die Ausgabe von
print(numbers)
?
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 11:20
von _corn_
_corn_ hat geschrieben: Freitag 3. Dezember 2021, 10:57
2 : {'Key1':'Datensatz1, 'Key2':'Datensatz2, 'Nummer':'2'}
@rogerb
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 11:31
von noisefloor
Hallo,
`number` ist halt ein Dict, dass kann man nicht mit einem Integer vergleichen. Aus dem Dict müsstest du dir noch den Wert des Schlüssels ziehen, den du vergleichen willst, also `number['Nummer'].
Gruß, noisefloor
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 11:33
von rogerb
@_corn_,
also enthält number das: {'Key1':'Datensatz1, 'Key2':'Datensatz2, 'Nummer':'2'}
und das kann man nicht mit einem int vergleichen.
Versuch mal das:
Code: Alles auswählen
numbers = read_number()
print(numbers)
for number in numbers:
if number > 1:
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 11:41
von _corn_
@rogerb dann bekomm ich die Meldung TypeError: '>' not supported between instances of 'str' and 'int'
@noisfloor wie genau würde das aussehen: wenn ich das mache, sagt er mir: TypeError: string indices must be integers
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 11:48
von __deets__
Du musst auf den gewünschten Wert zugreifen. number[key] > zahl. Python kann nicht erraten, welche der beliebig vielen Schlüssel du denn meinst vergleichen zu wollen.
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 12:03
von rogerb
number[key] ist auch ein string. (also wenn man über numbers.values() iteriert, sonst ist es ein Dictionary)
@ulipy,
du hattest geschrieben, dass dies die Ausgabe von print(numbers) ist:
2 : {'Key1':'Datensatz1, 'Key2':'Datensatz2, 'Nummer':'2'}
Das kann nicht sein, da da Anführungszeichen nach Datensatz1 und Datensatz2 fehlen.
Und wenn die erste 2 wirklich ein int ist, dann funktioniert das:
Code: Alles auswählen
numbers = {2 : {'Key1':'Datensatz1', 'Key2':'Datensatz2', 'Nummer':'2'}}
for number in numbers:
if number > 1:
print(f"{number} ist größer als 1")
"""
Ausgabe:
2 ist größer als 1
"""
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 12:09
von Sirius3
@rogerb: der Code, wie das Wörterbuch entsteht, steht ja da. Und der Inhalt kommt nunmal aus einem DictReader, und der liefert nur Strings als Werte.
@_corn_: Du mußt selbst das, was Du liest und eine Zahl repräsentiert, in eine Zahl umwandeln:
Code: Alles auswählen
def read_number():
with open('Datei.csv', encoding='utf-8', newline='') as csv_input:
reader = csv.DictReader(csv_input, delimiter=';')
lookup_number = {}
for row in reader:
lookup_number[int(row['Nummer'])] = row
return lookup_number
wobei sowohl der Name der Funktion `read_number`, als auch das Ergebnis `lookup_number` irreführend sind, denn es wird nicht nur eine Zahl geladen, und Du schlägst mit lookup_number auch keine Zahl nach, sondern ein Wörterbuch, was auch immer dessen Inhalt ist.
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 12:25
von rogerb
Und der Inhalt kommt nunmal aus einem DictReader, und der liefert nur Strings als Werte.
Stimmt, das hätte ich selber sehen müssen:
Der Komplette Code sollte dann so aussehen:
Code: Alles auswählen
import csv
def read_number():
with open('Datei.csv', encoding='utf-8', newline='') as csv_input:
reader = csv.DictReader(csv_input, delimiter=';')
lookup_number = {}
for row in reader:
lookup_number[int(row['Nummer'])] = row
return lookup_number
def main():
numbers = read_number()
print(numbers)
for number in numbers:
if number > 1:
print("Geht")
if __name__ == "__main__":
main()
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 12:42
von _corn_
@all Vielen Dank für die gute Hilfe. Es funktioniert alles und ich habe es verstanden: Besser kann es nicht laufen. Lg und noch ein schönes Wochenende!