Seite 1 von 1

for - Schleife bei Liste vs. Dict

Verfasst: Dienstag 26. Januar 2021, 11:18
von Hartmannsgruber
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}

Re: for - Schleife bei Liste vs. Dict

Verfasst: Dienstag 26. Januar 2021, 11:28
von sparrow
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.

Re: for - Schleife bei Liste vs. Dict

Verfasst: Dienstag 26. Januar 2021, 11:46
von ThomasL
@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]}")

Re: for - Schleife bei Liste vs. Dict

Verfasst: Dienstag 26. Januar 2021, 12:05
von DeaD_EyE
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}")