Eu quero criar um dicionário cujos valores são listas. Por exemplo:
{
1: ['1'],
2: ['1','2'],
3: ['2']
}
Se eu fizer:
d = dict()
a = ['1', '2']
for i in a:
for j in range(int(i), int(i) + 2):
d[j].append(i)
Eu recebo um KeyError, porque d [...] não é uma lista. Nesse caso, posso adicionar o seguinte código após a atribuição de a para inicializar o dicionário.
for x in range(1, 4):
d[x] = list()
Existe uma maneira melhor de fazer isso? Digamos que não conheço as chaves que vou precisar até estar no segundo for
ciclo. Por exemplo:
class relation:
scope_list = list()
...
d = dict()
for relation in relation_list:
for scope_item in relation.scope_list:
d[scope_item].append(relation)
Uma alternativa seria substituir
d[scope_item].append(relation)
com
if d.has_key(scope_item):
d[scope_item].append(relation)
else:
d[scope_item] = [relation,]
Qual a melhor forma de lidar com isto? Idealmente, anexar "apenas funcionaria". Existe alguma maneira de expressar que eu quero um dicionário de listas vazias, mesmo que eu não conheça todas as chaves ao criar a lista?
collections
módulo também funcionam dessa maneira, por exemplocollections.OrderedDict
.