Quiero crear un diccionario cuyos valores son listas. Por ejemplo:
{
1: ['1'],
2: ['1','2'],
3: ['2']
}
Si lo hago:
d = dict()
a = ['1', '2']
for i in a:
for j in range(int(i), int(i) + 2):
d[j].append(i)
Me sale un KeyError, porque d [...] no es una lista. En este caso, puedo agregar el siguiente código después de la asignación de a para inicializar el diccionario.
for x in range(1, 4):
d[x] = list()
¿Hay una mejor manera de hacer esto? Digamos que no sé las claves que voy a necesitar hasta que esté en el segundo forciclo. Por ejemplo:
class relation:
scope_list = list()
...
d = dict()
for relation in relation_list:
for scope_item in relation.scope_list:
d[scope_item].append(relation)
Una alternativa sería reemplazar
d[scope_item].append(relation)
con
if d.has_key(scope_item):
d[scope_item].append(relation)
else:
d[scope_item] = [relation,]
¿Cuál es la mejor manera de manejar esto? Idealmente, anexar "simplemente funcionaría". ¿Hay alguna forma de expresar que quiero un diccionario de listas vacías, incluso si no conozco todas las claves cuando creo la lista por primera vez?
collectionsmódulo también funcionan de esta manera, por ejemplocollections.OrderedDict.