2012-08-15 114 views
2

假設有一本字典逆轉一到一個映射字典

a = {'a':122,'b':123,'d':333,'e':'233'} 

現在我想恢復它作爲一個對一個字典,以便我們能夠做到這一點。

我曾嘗試:

In [67]: ivd=[(v,k) for (k,v) in a.items()] 

In [68]: ivd 
Out[68]: [(122, 'a'), (123, 'b'), ('233', 'e'), (333, 'd')] 

現在可能有一些我們可以如何ivd轉換成字典。我的問題是

  1. 如何將ivd更改爲字典?
  2. 有沒有更多pythonic解決方案可以做到這一點?我認爲它應該在那裏。
+0

如果你在最後一行沒有得到語法錯誤,ipython會被破壞;這當然是cpython中的一個語法錯誤。 – geoffspear 2012-08-15 22:11:31

+0

它只是ipython中的一個錯誤,或者它僅僅是我的本地系統中的一個錯誤? – 2012-08-15 22:12:26

+0

我剛剛安裝了ipython,它爲您發佈的內容提供了語法錯誤。 – geoffspear 2012-08-15 22:15:17

回答

11

您可以使用字典的構造函數:

ivd = dict((v, k) for (k, v) in a.iteritems()) 

或字典理解在Python 2.7或更高版本:

ivd = {v: k for (k, v) in a.items()} 
+0

'dict([(v,k)for(k,v)in a.items()])'for Python2在生成器表達式之前 – 2012-08-15 22:13:07

+1

您爲我做了一天!我不知道字典的理解。萬分感謝。 – 2012-08-15 23:08:01

0

爲什麼不

ivd = {a[key]:key for key in a} 

其中一個是你的字典?這似乎更簡單。在python中,你可以直接遍歷字典的鍵。