Je veux créer un dictionnaire dont les valeurs sont des listes. Par exemple:
{
1: ['1'],
2: ['1','2'],
3: ['2']
}
Si je fais:
d = dict()
a = ['1', '2']
for i in a:
for j in range(int(i), int(i) + 2):
d[j].append(i)
J'obtiens une KeyError, car d [...] n'est pas une liste. Dans ce cas, je peux ajouter le code suivant après l'attribution d'un pour initialiser le dictionnaire.
for x in range(1, 4):
d[x] = list()
Y a-t-il une meilleure manière de faire cela? Disons que je ne connais pas les clés dont je vais avoir besoin jusqu'à ce que je sois dans la deuxième for
boucle. Par exemple:
class relation:
scope_list = list()
...
d = dict()
for relation in relation_list:
for scope_item in relation.scope_list:
d[scope_item].append(relation)
Une alternative serait alors de remplacer
d[scope_item].append(relation)
avec
if d.has_key(scope_item):
d[scope_item].append(relation)
else:
d[scope_item] = [relation,]
Quelle est la meilleure façon de gérer cela? Idéalement, l'ajout «fonctionnerait tout simplement». Existe-t-il un moyen d'exprimer que je veux un dictionnaire de listes vides, même si je ne connais pas toutes les clés lorsque je crée la liste pour la première fois?
collections
module fonctionnent également de cette façon, par exemplecollections.OrderedDict
.