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?
python
dictionary
user118662
fonte
fonte
collections
módulo também funcionam dessa maneira, por exemplocollections.OrderedDict
.NameError: name 'a' is not defined
Você pode construí-lo com compreensão de lista como esta:
E para a segunda parte da sua pergunta, use defaultdict
fonte
Você pode usar
setdefault
:O nome bastante estranho
setdefault
função de diz "Obtenha o valor com essa chave ou, se essa chave não estiver lá, adicione esse valor e, em seguida, retorne".Como outros já salientaram,
defaultdict
é uma escolha melhor e mais moderna.setdefault
ainda é útil em versões mais antigas do Python (anteriores à 2.5).fonte
Sua pergunta já foi respondida, mas no IIRC você pode substituir linhas como:
com:
Ou seja,
d
referênciasd.keys()
nessa construção. Às vezes,defaultdict
não é a melhor opção (por exemplo, se você deseja executar várias linhas de código após oelse
associado ao descrito acimaif
), e acho ain
sintaxe mais fácil de ler.fonte
Pessoalmente, eu apenas uso o JSON para converter as coisas em strings e vice-versa. Cordas eu entendo.
fonte
maneira fácil é:
fonte