Compreensão do dicionário em Python 3
encontrei a seguinte pilha de transbordos sobre compreensões dict em {[[2]} ePython 3+
: crie um dicionário com compreensão de listas em Python afirmando que posso aplicar compreensões de dicionários como este:
d = {key: value for (key, value) in sequence}
Tentei em Python 3. No entanto, levanta uma excepção.
d = {'a':1, 'b':2, 'c':3, 'd':4}
{key : value for (key, value) in d}
{key : value for key, value in d}
ambas as versões levantam um ValueError
dizendo que ValueError: need more than 1 value to unpack
.
Qual é a maneira mais fácil / mais direta de fazer uma compreensão do dicionário em Python3?
2 answers
Saltar sobre um dicionário só produz as chaves . Usar d.items()
para fazer um ciclo sobre ambas as teclas e valores:
{key: value for key, value in d.items()}
A excepção ValueError
que vê é Não um problema de compreensão dict, nem se limita ao Python 3; você veria o mesmo problema no Python 2 ou com um loop regular for
:
>>> d = {'a':1, 'b':2, 'c':3, 'd':4}
>>> for key, value in d:
... print key, value
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
Porque cada iteração só há um item a ser produzido.
Sem uma transformação, {k: v for k, v in d.items()}
é apenas um descritivo e caro d.copy()
; use um dict compreensão apenas quando você faz um pouco mais com as chaves ou valores, ou usar condições ou uma construção de loop mais complexa.
Bem dito acima - você pode deixar cair itens em Python3 se você o fizer desta maneira:
{Chave: d [chave] para a chave em d}
d = {'a':1, 'b':2, 'c':3, 'd':4}
z = {x: d[x] for x in d}
z
>>>{'a': 1, 'b': 2, 'c': 3, 'd': 4}
E isto permite também a capacidade de utilizar as condições
y = {x: d[x] for x in d if d[x] > 1}
y
>>>{'b': 2, 'c': 3, 'd': 4}
Divirtam-se!