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)