Python 3中的词典理解

Python 3中的词典理解,python,python-3.x,Python,Python 3.x,我在Python2.7和python3+中找到了以下关于dict理解的堆栈溢出帖子:声明我可以像这样应用字典理解: d = {key: value for (key, value) in sequence} 我在Python3中尝试过。然而,它引发了一个例外 d = {'a':1, 'b':2, 'c':3, 'd':4} {key : value for (key, value) in d} {key : value for key, value in d} 两个版本都会引发一个Value

我在
Python2.7
python3+
中找到了以下关于dict理解的堆栈溢出帖子:声明我可以像这样应用字典理解:

d = {key: value for (key, value) in sequence}
我在Python3中尝试过。然而,它引发了一个例外

d = {'a':1, 'b':2, 'c':3, 'd':4}
{key : value for (key, value) in d}
{key : value for key, value in d}
两个版本都会引发一个
ValueError
,表示
ValueError:需要超过1个值才能解包


在Python3中理解词典最简单/最直接的方法是什么?

在词典上循环只能产生键。使用
d.items()
循环键和值:

{key: value for key, value in d.items()}
您看到的
ValueError
异常不是dict理解问题,也不限于python3;在Python2或常规的
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
d={'a':1,'b':2,'c':3,'d':4} >>>对于键,d中的值: ... 打印键、值 ... 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:需要超过1个值才能解包 因为每次迭代只产生一个项目


没有转换,
{k:v代表k,v在d.items()}
只是一个冗长而昂贵的
d.copy()
;只有当您对键或值进行更多操作,或使用条件或更复杂的循环构造时,才能使用dict理解。

如上所述-如果您这样做,您可以在Python3中删除项目:

{key:d[key]表示d}

这也提供了使用条件的能力

y = {x: d[x] for x in d if d[x] > 1}
y
>>>{'b': 2, 'c': 3, 'd': 4}

享受吧

词典理解意味着通过某种逻辑在词典中生成条目:

x = {p: p*p for p in range(10)}

print(x)

y = {q: q*3 for q in range(5,15) if q%2!=0}

print(y)

dict理解需要一系列键值对。您正在向它输入一个dict,它不是一个键值对序列。我知道这是一个老问题,但我只是想补充一点,以避免错误,
d
应该是
(('a',1),('b',2),('c',3'),('d',4))
x = {p: p*p for p in range(10)}

print(x)

y = {q: q*3 for q in range(5,15) if q%2!=0}

print(y)