2013-12-10 80 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} 

享受!