Seite 1 von 1
Dictionary
Verfasst: Mittwoch 27. April 2022, 15:19
von Loster_Paddel
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...
Re: Dictionary
Verfasst: Mittwoch 27. April 2022, 15:20
von Loster_Paddel
Fehlermedlung:
for key, value in dict:
ValueError: too many values to unpack (expected 2)
Re: Dictionary
Verfasst: Mittwoch 27. April 2022, 15:26
von Sirius3
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.
Re: Dictionary
Verfasst: Mittwoch 27. April 2022, 15:33
von Loster_Paddel
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.
Re: Dictionary
Verfasst: Mittwoch 27. April 2022, 15:34
von Sirius3
Und wie sieht der Code dazu aus und wie ist die Fehlermeldung?
Re: Dictionary
Verfasst: Mittwoch 27. April 2022, 15:37
von Loster_Paddel
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.
Re: Dictionary
Verfasst: Mittwoch 27. April 2022, 16:30
von imonbln
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)
Re: Dictionary
Verfasst: Mittwoch 27. April 2022, 17:23
von DeaD_EyE
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.