2011-05-20 48 views
5

我的2元組像這樣的列表創建字典:從列表中的2元組

l = [('a', 1), ('b', 2)] 

,我希望能夠以這種映射到一個字典對象,這樣我可以做像

l.a #=> 1 

所以我試過這個,但爲什麼它失敗?

d = reduce(lambda y,x : y.update({x[0]:x[1]}),l,{}) 

這給了錯誤:

AttributeError: 'NoneType' object has no attribute 'update'

我在做什麼錯?

回答

20
>>> l = [('a', 1), ('b', 2)] 
>>> d = dict(l) 
>>> d['a'] 
1 
+0

不知道爲什麼我沒有弄清楚這一點!謝謝安德烈 – nemesisfixx 2011-05-20 13:22:07

+0

雖然這解決了mcnemesis的問題,但這個答案並沒有解決他爲什麼他的代碼失敗的問題。 – 2011-05-20 14:37:26

+1

@Steven Rumbalski:因爲'dict.update'返回'None',而不是字典。 – 2011-05-20 14:52:13

4

爲什麼不只是這樣做:

d = dict(l) 

另外,回答你的問題,你的解決方案是失敗的,因爲y(這是一個2元組)有沒有一種方法更新,因爲它不是一個字典。謝天謝地,你正在做的事是建立在。

+0

謝謝@Rafe Kettler,雖然我的方法讓我困惑,但是,在'reduce'運行的第一次,鑑於我將'{}'作爲'initial value'傳入,我不能對其調用'update'嗎?在這種情況下,是不是'y'綁定了值'{}',第一次執行reduce?還是我誤會了? – nemesisfixx 2011-05-20 15:07:16