Dictionary

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
Loster_Paddel
User
Beiträge: 39
Registriert: Samstag 16. April 2022, 20:31

Was mache ich hier falsch?!

Code: Alles auswählen

import json

dict = {"Max" : 0 , "Mustermann" : 2, "peter" : 4}
dict_values = dict.values()
dict_values_max = max(dict_values)

print(dict_values_max)

for key, value in dict:
    if value == dict_values_max:
        print(key)
Eigentlich macht es doch Sinn...
Loster_Paddel
User
Beiträge: 39
Registriert: Samstag 16. April 2022, 20:31

Fehlermedlung:

for key, value in dict:
ValueError: too many values to unpack (expected 2)
Sirius3
User
Beiträge: 17844
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn man über ein Wörterbuch iteriert, bekommt man die Schlüssel.
Du willst über `dict.items()` iterieren.
`dict` ist übrigens ein sehr schlechter Variablenname, weil er den Python-Typ dict überdeckt.
Loster_Paddel
User
Beiträge: 39
Registriert: Samstag 16. April 2022, 20:31

Mir dict.items hab ich es auch schon probiert, hab es aber irgenwie nicht hinbekommen. Ich möchte einen unbekannten key anhand des values suchen.
Sirius3
User
Beiträge: 17844
Registriert: Sonntag 21. Oktober 2012, 17:20

Und wie sieht der Code dazu aus und wie ist die Fehlermeldung?
Loster_Paddel
User
Beiträge: 39
Registriert: Samstag 16. April 2022, 20:31

Habs...

Code: Alles auswählen

dict = {"Max" : 0 , "Mustermann" : 2, "peter" : 4}
dict_values = dict.values()
dict_values_max = max(dict_values)

print(dict_values_max)

for key, value in dict.items():
    if value == dict_values_max:
        print(key)
Das meinten sie wahrscheinlich auch.
imonbln
User
Beiträge: 149
Registriert: Freitag 3. Dezember 2021, 17:07

Wie schon gesagt dict ist ein dummer Name für eine Variable (eigentlich alles das ein Builtin entspricht).
Und was ist denn deine Erwartungshaltung, wenn zwei Keys denn gleichen Value haben? Denn Keys sind einzigartig, Values sind es nicht.

Generell kann der Wunsch ein Key nach seinem Value zu suchen, ein Anzeichen sein, dass dein Design ein Problem hat. Außerdem stellt sich noch die Frage, wie oft musst du das machen? Bei vielen Revers Lookups kann es von Vorteil sein ein reverse dict aufzubauen, um dort den Key schnell nachzusehen.

Wenn die Values nur einmal vorkommen:

Code: Alles auswählen

punkte = {"Max" : 0 , "Mustermann" : 2, "peter" : 4}
max_value = max(punkte.values())

revpunkte = { v:k for k, v in punkte.items() }
print(revpunkte[max_value])
Wenn es mehrere Keys zu einem Value geben kann:

Code: Alles auswählen

punkte = {"Max" : 0 , "Mustermann" : 2, "peter" : 4 , "susi": 4}
max_value = max(punkte.values())
revpunkte = {}
for key, value in punkte.items():
    revpunkte.setdefault(value, list()).append(key)
print(revpunkte[max_value])
last but not least die max-builtin funktion hat einen key parameter dein Code lässt sich in folgenden einzeiler zusammenfassen. gibt aber auch nur einen key bei gleichen Values aus:

Code: Alles auswählen

punkte = {"Max" : 0 , "Mustermann" : 2, "peter" : 4 }
sieger = max(punkte, key=punkte.get)
print(sieger)
Benutzeravatar
DeaD_EyE
User
Beiträge: 1038
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Alle Namen, die hier aufgelistet sind, sollten niemals als Bezeichner für irgendwas anderes verwendet werden: https://docs.python.org/3/library/functions.html
Das gilt vorwiegend dann, wenn man Code auf Modulebene hat. In einer Funktion würde die Zuweisung nur lokal innerhalb der Funktion gelten und alles Außerhalb der Funktion nicht beeinflussen.
Wer sich daran nicht hält, wird irgendwann in seinem Leben ziemlich lange nach so einem Fehler suchen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten