In einem Dictionary < und > benutzen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

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
"""
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

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()
_corn_
User
Beiträge: 27
Registriert: Montag 8. November 2021, 09:04

@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!
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
_corn_
User
Beiträge: 27
Registriert: Montag 8. November 2021, 09:04

...
Antworten