Seite 1 von 2
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!
Re: In einem Dictionary < und > benutzen?
Verfasst: Freitag 3. Dezember 2021, 14:28
von __blackjack__
Ich würde da noch eine „dict comprehension“ und `any()` einbauen:
Code: Alles auswählen
#!/usr/bin/env python3
import csv
def read_numbers():
with open("Datei.csv", encoding="utf-8", newline="") as file:
reader = csv.DictReader(file, delimiter=";")
return {int(row["Nummer"]): row for row in reader}
def main():
numbers = read_numbers()
print(numbers)
if any(number > 1 for number in numbers):
print("Geht")
if __name__ == "__main__":
main()
Re: In einem Dictionary < und > benutzen?
Verfasst: Montag 6. Dezember 2021, 08:29
von _corn_
...