2013-12-10 81 views
8

我发现关于字典推导以下堆栈溢出后在Python2.7Python 3+Create a dictionary with list comprehension in Python指出,我可以申请字典推导如下:字典理解在Python 3

d = {key: value for (key, value) in sequence} 

我在Python 3试了一下但是,它引发了一个例外。

d = {'a':1, 'b':2, 'c':3, 'd':4} 
{key : value for (key, value) in d} 
{key : value for key, value in d} 

两个版本都提出一个ValueErrorValueError: need more than 1 value to unpack

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

+2

词典理解需要一系列键值对。你给它一个字典,它不是一个键值对的序列。 – user2357112

回答

13

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

{key: value for key, value in d.items()} 

ValueError例外,你看是不是一个字典理解的问题,也不是限制到Python 3;你会看到在Python 2或定期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 

,因为每个迭代只有一个正在取得项目。

没有转换,{k: v for k, v in d.items()}只是一个详细和昂贵的d.copy();只有当您对键或值做更多的操作时,或者使用条件或更复杂的循环结构时才使用词典理解。

1

那么上面所说的 - 你可以掉落物品在Python3如果你这样做是这样的:{:在d键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} 

提供使用条件的能力以及

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

享受!