Python-Wörterbücher übergeben Schlüssel und rufen Werte ab. Es ist jedoch zu beachten, dass ein Fehler auftritt, wenn sich der dem angegebenen Schlüssel entsprechende Eintrag nicht im Wörterbuch befindet.
keyerror.py
# -*- coding:utf-8 -*-
import traceback
dct = {"ham": 100, "jam": 300} #Es gibt kein Ei.
try:
#Da es kein Ei gibt, bekomme ich einen KeyError.
egg = dct["egg"]
except KeyError:
traceback.print_exc()
Wenn Sie nicht garantiert sind, dass der von Ihnen angegebene Schlüssel im Wörterbuch vorhanden ist, können Sie mit dict.get danach suchen, und es wird keine Fehlermeldung angezeigt. Sie können auch einen alternativen Wert angeben.
dictget.py
# -*- coding:utf-8 -*-
dct = {"ham": 100, "jam": 300}
print("dict.get => %s" % dct.get("egg", "orz"))
Wenn es sich im Wörterbuch befindet, wird der enthaltene Wert abgerufen. Wenn dies nicht der Fall ist, verwenden Sie dict.setdefault, wenn Sie einen beliebigen Wert in das Wörterbuch einfügen möchten.
dictsetdefault.py
# -*- coding:utf-8 -*-
dct = {"ham": 100, "jam": 300}
#Wenn Sie zuweisen möchten, wenn dem Schlüssel kein Eintrag entspricht, setzen Sie den Standardwert
egg = dct.setdefault("egg", "knuckle")
print("dict.get => %s, egg=%s" % (dct["egg"], egg))
#Da das Ei bereits vorhanden ist, wird es nicht überschrieben.
egg = dct.setdefault("egg", "mens")
print("dict.get => %s, egg=%s" % (dct["egg"], egg))
Das Standard-Diktat ist nützlich, wenn Sie ein Wörterbuch mit einer komplizierten Struktur erstellen. Übergeben Sie im Konstruktor eine Factory, die einen alternativen Wert erstellt, wenn dem Schlüssel kein Eintrag entspricht. Im folgenden Beispiel wird für jeden Schlüssel ein Wörterbuch erstellt, das Werte in der Liste enthält.
defaultdictusage.py
# -*- coding:utf-8 -*-
from collections import defaultdict
alt = defaultdict(list)
keys = tuple("imagawa")
values = (1, 1, 2, 2, 3, 4, 5)
for k, v in zip(keys, values):
alt[k].append(v)
print(alt)
Das Standarddiktat befindet sich im Sammlungsmodul, aber es gibt ein anderes benanntes Tupel im Sammlungsmodul. Sie können dies verwenden, um ein Objekt zu definieren, das Tupel ist, aber auch Attributzugriff hat.
namedtupleusage.py
# -*- coding:utf-8 -*-
from collections import namedtuple
Role = namedtuple("Role", "user course")
roles = [Role(x, y) for x, y in ((45, 6), (52, 3))]
for role in roles:
print("user=%s, course=%s" % (role.user, role.course))
#Natürlich ist auch ein Indexzugriff möglich.
assert role[0] is role.user and role[1] is role.course
samplecode.py
# -*- coding:utf-8 -*-
import traceback
dct = {"ham": 100, "jam": 300} #Es gibt kein Ei.
try:
#Da es kein Ei gibt, bekomme ich einen KeyError.
egg = dct["egg"]
except KeyError:
traceback.print_exc()
# dict.Wenn Sie mit get suchen, tritt kein Fehler auf. Sie können auch einen alternativen Wert angeben.
print("dict.get => %s" % dct.get("egg", "orz"))
#Wenn Sie zuweisen möchten, wenn dem Schlüssel kein Eintrag entspricht, setzen Sie den Standardwert
egg = dct.setdefault("egg", "knuckle")
print("dict.get => %s, egg=%s" % (dct["egg"], egg))
#Da das Ei bereits vorhanden ist, wird es nicht überschrieben.
egg = dct.setdefault("egg", "mens")
print("dict.get => %s, egg=%s" % (dct["egg"], egg))
#Das Standard-Diktat ist nützlich, wenn Sie ein Wörterbuch mit einer komplizierten Struktur erstellen.
from collections import defaultdict
alt = defaultdict(list)
keys = tuple("imagawa")
values = (1, 1, 2, 2, 3, 4, 5)
for k, v in zip(keys, values):
alt[k].append(v)
print(alt)
#Benanntes Tupel benanntes Tupel.
from collections import namedtuple
Role = namedtuple("Role", "user course")
roles = [Role(x, y) for x, y in ((45, 6), (52, 3))]
for role in roles:
print("user=%s, course=%s" % (role.user, role.course))
#Natürlich ist auch ein Indexzugriff möglich.
assert role[0] is role.user and role[1] is role.course
result.txt
Traceback (most recent call last):
File "samplecode.py", line 9, in <module>
egg = dct["egg"]
KeyError: 'egg'
dict.get => orz
dict.get => knuckle, egg=knuckle
dict.get => knuckle, egg=knuckle
defaultdict(<type 'list'>, {'i': [1], 'a': [2, 3, 5], 'm': [1], 'w': [4], 'g': [2]})
user=45, course=6
user=52, course=3
Recommended Posts