2012-02-23 56 views
1

我在看一個功能性的方式來做到以下幾點:從字典功能轉換,列出

lst = [] 
for k, v in dict.iteritems(): 
    lst.append(my_class(k, v)) 
return lst 

一種近乎

imap(lambda (k,v): my_class(k, v), [...] dict [...]) 

將是理想的,但顯然是行不通的。

我該怎麼辦?

+1

這顯然不起作用? – Marcin 2012-02-23 12:00:20

+0

@Marcin:我不明白應該怎麼做,而不是因爲我不斷收到異常。 – Sardathrion 2012-02-23 12:03:42

+3

只需使用'dict.iteritems()' – 2012-02-23 12:07:58

回答

7

d是一個字典和f可調用,並給予starmap功能,第二個代碼可以寫爲:

from itertools import starmap 
starmap(f, d.iteritems()) 

或匹配您的代碼:starmap(my_class, dict.iteritems())

而要真正回答你的問題,功能方式是:

return list(starmap(my_class, dict.iteritems)) 
2
from itertools import starmap  
starmap(myclass, thedict.iteritems()) 

以上應該工作。

+0

將不起作用,iteritems返回一對。 – 2012-02-23 12:05:35

+0

@yi_H:爲什麼我改變它使用星圖。 – Marcin 2012-02-23 12:07:00

1
map(lambda x: my_class(*x), d.iteritems()) 
2

我會使用列表中理解語法

list = [ my_class(k,v) for k, v in dict.iteritems() ] 

發電機也可以使用。

gen = (my_class(k,v) for k, v in dict.iteritems()) 

發電機不會創建/運行該函數my_class(K,V),直到它被重複。