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?

Author: Community, 2013-12-10

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.

 27
Author: Martijn Pieters, 2013-12-10 08:39:01

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!
 5
Author: RandallShanePhD, 2017-03-31 20:29:33