by Guest » 16 Jan 2025, 05:55
Die folgenden zwei Ausdrücke scheinen mir gleichwertig zu sein. Welches ist vorzuziehen?
Code: Select all
data = [('a', 1), ('b', 1), ('b', 2)]
d1 = {}
d2 = {}
for key, val in data:
# variant 1)
d1[key] = d1.get(key, []) + [val]
# variant 2)
d2.setdefault(key, []).append(val)
Die Ergebnisse sind die gleichen, aber welche Version ist besser oder eher pythonischer?
Ich persönlich finde Version 2 schwerer zu verstehen, da setdefault für mich sehr schwierig zu verstehen ist. Wenn ich das richtig verstehe, sucht es nach dem Wert von „key“ im Wörterbuch, wenn dieser nicht verfügbar ist, gibt es „[]“ in das Diktat ein, gibt einen Verweis entweder auf den Wert oder auf „[]“ zurück und hängt „val“ daran an Referenz. Obwohl es auf jeden Fall flüssig ist, ist es nicht im Geringsten intuitiv (zumindest für mich).
Meiner Meinung nach ist Version 1 einfacher zu verstehen (falls verfügbar, ermitteln Sie den Wert für). „key“, wenn nicht, holen Sie sich „[]“, dann verknüpfen Sie es mit einer Liste bestehend aus [val] und platzieren Sie das Ergebnis in „key“). Obwohl diese Version intuitiver zu verstehen ist, befürchte ich, dass sie aufgrund der vielen Listenerstellung weniger leistungsfähig ist. Ein weiterer Nachteil besteht darin, dass „d1“ im Ausdruck zweimal vorkommt, was ziemlich fehleranfällig ist. Wahrscheinlich gibt es eine bessere Implementierung mit get, aber derzeit entfällt sie mir.
Ich vermute, dass Version 2 zwar für Unerfahrene schwieriger zu verstehen, aber schneller und daher schneller ist bevorzugt. Meinungen?
Die folgenden zwei Ausdrücke scheinen mir gleichwertig zu sein. Welches ist vorzuziehen?
[code]data = [('a', 1), ('b', 1), ('b', 2)]
d1 = {}
d2 = {}
for key, val in data:
# variant 1)
d1[key] = d1.get(key, []) + [val]
# variant 2)
d2.setdefault(key, []).append(val)
[/code]
Die Ergebnisse sind die gleichen, aber welche Version ist besser oder eher pythonischer?
Ich persönlich finde Version 2 schwerer zu verstehen, da setdefault für mich sehr schwierig zu verstehen ist. Wenn ich das richtig verstehe, sucht es nach dem Wert von „key“ im Wörterbuch, wenn dieser nicht verfügbar ist, gibt es „[]“ in das Diktat ein, gibt einen Verweis entweder auf den Wert oder auf „[]“ zurück und hängt „val“ daran an Referenz. Obwohl es auf jeden Fall flüssig ist, ist es nicht im Geringsten intuitiv (zumindest für mich).
Meiner Meinung nach ist Version 1 einfacher zu verstehen (falls verfügbar, ermitteln Sie den Wert für). „key“, wenn nicht, holen Sie sich „[]“, dann verknüpfen Sie es mit einer Liste bestehend aus [val] und platzieren Sie das Ergebnis in „key“). Obwohl diese Version intuitiver zu verstehen ist, befürchte ich, dass sie aufgrund der vielen Listenerstellung weniger leistungsfähig ist. Ein weiterer Nachteil besteht darin, dass „d1“ im Ausdruck zweimal vorkommt, was ziemlich fehleranfällig ist. Wahrscheinlich gibt es eine bessere Implementierung mit get, aber derzeit entfällt sie mir.
Ich vermute, dass Version 2 zwar für Unerfahrene schwieriger zu verstehen, aber schneller und daher schneller ist bevorzugt. Meinungen?