Функциональное преобразование из словаря в список - PullRequest
1 голос
/ 23 февраля 2012

Я ищу функциональный способ сделать следующее:

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

Что-то похожее на

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

было бы идеально, но явно не работает.

Как я мог это сделать?

Ответы [ 4 ]

7 голосов
/ 23 февраля 2012

Пусть d будет диктовкой, а f - вызываемым, и, учитывая функцию starmap, можно написать второй код:

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

Или в соответствии с вашим кодом: starmap(my_class, dict.iteritems())

А чтобы на самом деле ответить на ваш вопрос, функциональный путь был бы:

return list(starmap(my_class, dict.iteritems))
2 голосов
/ 23 февраля 2012

Я бы использовал синтаксис понимания списка

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), пока она не будет повторена.

2 голосов
/ 23 февраля 2012
from itertools import starmap    
starmap(myclass, thedict.iteritems())

Выше должно работать.

1 голос
/ 23 февраля 2012
map(lambda x: my_class(*x), d.iteritems())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...