Da kommt mir wieder im Sinn, dass viele einfach nicht wissen können wie man eine bestimmte Aufgabe löst.
Wir sind ja nicht als Programmierer geboren worden.
Meist haben die Menschen dann schon einen vorgefassten Weg, der aber oftmals in die falsche Richtung führt.
Dann kommen solche Antworten bei raus, die den falschen Weg beschreiben:
Code: Alles auswählen
[key for key, value in globals().items() if value == 42]
Sieht schick aus, führt aber am Ziel vorbei. Klar geht das, es ist aber falsch.
Das Beispiel am besten wieder ganz schnell vergessen.
Grundsätzlich sollte man die Datenstrukturen kennen und sich selbst immer hinterfragen, ob man gerade die richtige Datenstruktur verwendet. Wenn es unnötig kompliziert wird, hat man oftmals die falsche Datenstruktur. Wie bereits vorgeschlagen wäre ein Dict oder eine Liste die einfachste Lösung.
Dein Codebeispiel:
Würde ich so abändern:
Code: Alles auswählen
mapping = {1: 'eins', 2: 'zwei', 'drei': 'drei', 4: 'vier'}
Anstatt die Variablennamen als Keys zu nehmen, hab ich deine Werte verwendet, die du ja abfragen möchtest. Die Variablennamen waren das, was du dann einsetzen möchtest. Im Dict sind es dann die Werte, die dir zurückgeliefert werden. Der Zugriff auf ein Dict ist außerdem aufgrund der Implementierung auch sehr schnell.
Der Zugriff auf das Dict kann dann auf zwei Arten geschehen:
Würde dann 'eins' zurückgeben
Wenn der Key nicht existiert, bekommt man einen KeyError:
-> KeyError
Alternativ kann man die get Methode des
Dicts verwenden. Der Vorteil ist, dass man Standard-Rückgabewerte definieren kann, falls der Key nicht vorhanden ist. Standardmäßig wird None zurückgegeben, wenn der Key nicht gefunden wird.
-> NoneType
Hier nochmal mit Standard-Rückgabewert, falls der Key nicht gefunden wird.
-> 42
Mal ein Beispiel, wie man aus einer Liste eine neue Liste mit dem Mapping erstellen möchte:
Code: Alles auswählen
def get(list_input, mapping):
ret = []
for element in list_input:
new = mapping.get(element)
ret.append(new)
return ret
get([1,4,'drei'], mapping)
['eins', 'vier', 'drei']
get([1, 4, 42, 'drei'], mapping)
['eins', 'vier', None, 'drei']
Das gleiche nochmal als Funktion mit list comprehension:
Code: Alles auswählen
def get(list_input, mapping):
return [mapping.get(element) for element in list_input]
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server