for - Schleife bei Liste vs. Dict

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.
Antworten
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

Servus,

mir stellt sich nachfolgende Frage.
Den Index einer Liste mit dem vorherigen, oder nachfolgenden zu vergleichen ist ja relativ einfach.

Code: Alles auswählen

liste1 = [1,2,3,4,5,6,7,8,9]

for zahl in range(0, len(liste1)-1):
    if liste1[zahl] < liste1[zahl+1]:
        print(f"Nachfolgerzahl {liste1[zahl+1]} ist größer als Vorgängerzahl {liste1[zahl]}")
Wie aber macht man so etwas bei einem dict?
Das die Werte bei einem dict in zufälliger Reihenfolge wiedergegeben werden ist mir bewusst.
Gehen wir daher von einem OrderedDict aus.
Also Wert von ersten Schlüssel < Wert von zweitem Schlüssel

Code: Alles auswählen

dict1 = {"a":1, "b":2, "c":3, "d":4, "e":5, "f":6, "g":7, "h":8, "i":9}
Benutzeravatar
sparrow
User
Beiträge: 4200
Registriert: Freitag 17. April 2009, 10:28

Die Reihenfolge der Schlüssel ist seit einigen Python-Versionen nicht mehr zufällig sondern in der Reihenfolge, in der sie auch eingefügt wurden. Ich würde aber auch immer davon ausgehen, dass sie zufällig sind.
Du kannst doch ebenso vorhgehen wie bei der Liste, denn dictionaries kennen die Methode "keys()" die einem alle Schlüssel liefert.
Benutzeravatar
ThomasL
User
Beiträge: 1367
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

@sparrow Warum der Umweg über .keys() ? Es gibt doch auch .values()

Code: Alles auswählen

dictionary = {"a":1, "b":2, "c":3, "d":4, "e":5, "f":6, "g":7, "h":8, "i":9}

liste1 = list(dictionary.values())

for zahl in range(0, len(liste1)-1):
    if liste1[zahl] < liste1[zahl+1]:
        print(f"Nachfolgerzahl {liste1[zahl+1]} ist größer als Vorgängerzahl {liste1[zahl]}")
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
DeaD_EyE
User
Beiträge: 1023
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Mit more_itertools ist es etwas einfacher: https://more-itertools.readthedocs.io/e ... #windowing
Im Endeffekt brauchst du ein Fenster, dass 2 Elemente sieht und immer um eins nach rechts verschoben wird.
Dann hast du immer letztes_element, aktuelles_element usw.

Code: Alles auswählen

from more_itertools import windowed

dictionary = {"a":1, "b":2, "c":3, "d":4, "e":5, "f":6, "g":7, "h":8, "i":9}

for letzte_zahl, aktuelle_zahl in windowed(dictionary.values(), 2):
    if letzte_zahl < aktuelle_zahl:
        print(f"Nachfolgerzahl {aktuelle_zahl} ist größer als Vorgängerzahl {letzte_zahl}")
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten