Les dictionnaires Python transmettent les clés et récupèrent les valeurs. Cependant, il faut noter qu'une erreur se produira si l'entrée correspondant à la clé spécifiée ne se trouve pas dans le dictionnaire.
keyerror.py
# -*- coding:utf-8 -*-
import traceback
dct = {"ham": 100, "jam": 300} #Il n'y a pas d'oeuf.
try:
#Puisqu'il n'y a pas d'oeuf, j'obtiens une KeyError.
egg = dct["egg"]
except KeyError:
traceback.print_exc()
Si vous n'êtes pas assuré que la clé que vous spécifiez existe dans le dictionnaire, vous pouvez la rechercher avec dict.get et vous n'obtiendrez pas d'erreur. Vous pouvez également spécifier une valeur alternative.
dictget.py
# -*- coding:utf-8 -*-
dct = {"ham": 100, "jam": 300}
print("dict.get => %s" % dct.get("egg", "orz"))
S'il est dans le dictionnaire, il récupère la valeur contenue, mais si ce n'est pas le cas, si vous voulez mettre une valeur arbitraire dans le dictionnaire, utilisez dict.setdefault.
dictsetdefault.py
# -*- coding:utf-8 -*-
dct = {"ham": 100, "jam": 300}
#Si vous souhaitez attribuer lorsqu'il n'y a pas d'entrée correspondant à la clé, définissez par défaut
egg = dct.setdefault("egg", "knuckle")
print("dict.get => %s, egg=%s" % (dct["egg"], egg))
#Puisque l'œuf existe déjà, il ne sera pas écrasé.
egg = dct.setdefault("egg", "mens")
print("dict.get => %s, egg=%s" % (dct["egg"], egg))
Le dict par défaut est utile lors de la création d'un dictionnaire avec une structure compliquée. Passez une fabrique dans le constructeur qui crée une valeur alternative s'il n'y a pas d'entrée correspondant à la clé. Dans l'exemple suivant, un dictionnaire contenant des valeurs dans la liste est créé pour chaque clé.
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)
Le defaultdict se trouve dans le module collections, mais il y a un autre namedtuple dans le module collections. Vous pouvez l'utiliser pour définir un objet qui est un tuple mais qui a également un accès aux attributs.
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))
#Bien entendu, un accès en indice est également possible.
assert role[0] is role.user and role[1] is role.course
samplecode.py
# -*- coding:utf-8 -*-
import traceback
dct = {"ham": 100, "jam": 300} #Il n'y a pas d'oeuf.
try:
#Puisqu'il n'y a pas d'oeuf, j'obtiens une KeyError.
egg = dct["egg"]
except KeyError:
traceback.print_exc()
# dict.Si vous recherchez avec get, aucune erreur ne se produira. Vous pouvez également spécifier une valeur alternative.
print("dict.get => %s" % dct.get("egg", "orz"))
#Si vous souhaitez attribuer lorsqu'il n'y a pas d'entrée correspondant à la clé, définissez par défaut
egg = dct.setdefault("egg", "knuckle")
print("dict.get => %s, egg=%s" % (dct["egg"], egg))
#Puisque l'œuf existe déjà, il ne sera pas écrasé.
egg = dct.setdefault("egg", "mens")
print("dict.get => %s, egg=%s" % (dct["egg"], egg))
#Le dict par défaut est utile lors de la création d'un dictionnaire avec une structure compliquée.
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)
#Tuple nommé namedtuple.
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))
#Bien entendu, un accès en indice est également possible.
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