Dictionary Index

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
norgsmen
User
Beiträge: 55
Registriert: Samstag 26. Juni 2021, 22:09

Hallo Community,

ich verstehe nicht, wie der Index bei den dictionarys arbeitet.

Beispiel:

Code: Alles auswählen

frequencies = {"und": 1002, "oder": 876, "nicht": 311}

for word in frequencies:
    output = "Das Wort '" + word + "' kommt " + str(frequencies[word]) + "-mal vor."
    print(output)
Weshalb wird bei

Code: Alles auswählen

 str(frequencies[word])
nicht "und" ausgeben?
Es wird doch mit dem Index im dictionary auf den ersten Wert zugegriffen und der erste Wert ist doch in dem Falle "und".

Müsste die Ausgabe also nicht --> Das Wort 'und' kommt und -mal vor. ?

Danke im Voraus
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es wird auf den ersten key (der “und” ist) zugegriffen, und der dazugehörige Wert (1002) geliefert. Das ist Sinn Jen Zweck von Wörterbüchern.
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

Eine Schleife über ein Wörterbuch liefert die Schlüssel, sonst würde ja der Variablenname `wort` auch keinen Sinn machen. Und der Zugriff über Eckige Klammern liefert den Wert für den Schlüssel.
Wenn man sowohl Schlüssel als auch Wert braucht, benutzt man .items(). Strings stückelt man nicht mit + zusammen, sondern nutzt Formatstrings. Den String kann man gleich per `print` ausgeben und muß ihn nicht in einer Variable zwischenspeichern:

Code: Alles auswählen

frequencies = {"und": 1002, "oder": 876, "nicht": 311}

for word, frequency in frequencies.items():
    print(f"Das Wort '{word}' kommt {frequency}-mal vor.")
norgsmen
User
Beiträge: 55
Registriert: Samstag 26. Juni 2021, 22:09

@Sirius3 Also die eckigen Klammern sind in dem Fall dafür, da dass immer der Wert des dictionarys ausgegeben wird richtig?
Wenn man sowas

Code: Alles auswählen

str(frequencies[word])
sieht, könnte man doch auch meinen, dass nur der erste Teil des dictionarys ausgegeben wird, nämlich nur "und"
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

Könnte man, ist aber nicht so.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Meinen kann man vieles. Ist halt so nicht. Ein Wörterbuch ordnet Schlüssel werten zu. Der []-Operator greift auf eine wert via des Schlüssels zu. So ist das nunmal, und sich da selbst was auszudenken, und dann überrascht sein, wieso das nicht ist, wie man es sich gedacht hat - Nunja.
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

@norgsmen: Und welchen Sinn könnte es haben, so den Schlüssel auszugeben? Den hast du doch eh schon.
norgsmen
User
Beiträge: 55
Registriert: Samstag 26. Juni 2021, 22:09

@ sparrow Es ist ja in Endeffekt ziemlich verständlich, und zwar greift man mit dem Index auf den Wert des dictionarys zu und nicht auf den Schlüssel. Ich war irritiert darüber, weil ich das ganze mit einer normalen Liste verglichen haben, wo es ja nun mal so ist, dass man mit "0" auf den ersten Wert der Liste zugreift.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

norgsmen hat geschrieben: Mittwoch 4. Januar 2023, 14:09 @ sparrow Es ist ja in Endeffekt ziemlich verständlich, und zwar greift man mit dem Index auf den Wert des dictionarys zu und nicht auf den Schlüssel. Ich war irritiert darüber, weil ich das ganze mit einer normalen Liste verglichen haben, wo es ja nun mal so ist, dass man mit "0" auf den ersten Wert der Liste zugreift.
Du hast bei dem Dictionary überhaupt keinen Index. Nicht alles was in eckigen Klammern steht ist ein Index. Du hast das Dictionary und du hast einen Schlüssel. Diesen Schlüssel verwendest du jetzt um aus dem Dictionary den zugehörigen Wert zu holen. Punkt.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

norgsmen hat geschrieben: Mittwoch 4. Januar 2023, 14:09 @ sparrow Es ist ja in Endeffekt ziemlich verständlich, und zwar greift man mit dem Index auf den Wert des dictionarys zu und nicht auf den Schlüssel. Ich war irritiert darüber, weil ich das ganze mit einer normalen Liste verglichen haben, wo es ja nun mal so ist, dass man mit "0" auf den ersten Wert der Liste zugreift.
Ja und das ist doch genau das gleiche. Bei einer Liste erfolgt der Zugriff ueber den Schluessel "Position", und bei einem Woerterbuch eben ueber welchen Schluessel auch immer. Genau darum sind die synonym. Womit du das hier eher verwechselts ist wohl das

Code: Alles auswählen

for wert in liste:
vs

Code: Alles auswählen

for schluessel in woerterbuch:
Darum gibt es woerterbuch.items() und woerterbuch.values()
Antworten