2015-03-19 5 views
2

У меня есть список L словарей, в которых словари имеют одинаковый набор ключей.Применить функции к значениям словарей

У меня есть другой словарь d, который также имеет тот же набор ключей, что и предыдущие словари.

Для каждого key в наборе ключей, d[key] является функцией, которая может применяться к L[i][key], т.е. d[key](L[i][key]).

Я хочу, чтобы сбросить значения словарей в L, используя функции в значениях d, т.е.

L[i][key] = d[key](L[i][key]) 

для всех key и всех i.

Как я могу сделать это более питоническим способом? Благодарю.

E.g.

d = {'a':int, 'b':myfun, 'c':yourfun} 

L[1] = {'a':`10`, 'b':5, 'c':1.4} 

, где int является функцией преобразования типа int(), myfun это функция, которая может принимать целое число в качестве аргумента, а yourfun другой функции, которая может принимать плавающее число в качестве аргумента.

+3

примером может быть лучше. –

+1

О, человек. Я бы сказал, что нет никакого питонического способа сделать неряшливую вещь. Можете ли вы достичь своей цели таким образом, чтобы не включать такой подход? – humanoid

+0

В идеале, я думаю, у вас должен быть такой большой словарь, как: '{'key1': {'fn': func, 'L': [L [0] ['key1'], L [1] ['key1' ] и т. д.}}, 'key2': ... и т. д. '' Если все данные связаны с ключом, его следует сгруппировать по ключу, нет? Зачем использовать отдельные словари с одинаковыми наборами ключей? – Shashank

ответ

5

Вы можете регенерировать L с соответствующими значениями, используя список и Dict понимание:

L = [{k: d[k](v) for (k, v) in l.iteritems()} for l in L] 
+0

Спасибо. Все указанные словари являются коллекциями. Задействованы и имеют одинаковые приказы в своих ключах. Ваш путь создаст неупорядоченный словарь. Как создать коллекцию.OrderedDict в том же порядке, что и указанные словари? – Tim

+0

http://stackoverflow.com/questions/29136222/create-ordered-dict-from-list-comprehension – Tim

Смежные вопросы