How can I process a python dictionary with callables?
dictionary, python
Solution
I often use an argument-free `lambda` here, just because I like the syntax:
>>> def foo(x):
... return x*100
...
>>> a = {'key1': 'value1', 'key2': 42, 'key3': lambda: foo(20)}
>>> a
{'key3': <function <lambda> at 0x96ae80c>, 'key2': 42, 'key1': 'value1'}
>>> {k: v() if callable(v) else v for k,v in a.iteritems()}
{'key3': 2000, 'key2': 42, 'key1': 'value1'}
Problem
I would like to create a python directory whose values are to be evaluated separately. So, for example, in the following non-working example I define ``` a = {'key1': 'value1', 'key2': 42, 'key3': foo(20)} ``` for which e.g. ``` def foo(max): """Returns random float between 0 and max.""" return max*random.random() ``` and after processing of the dict I want to have e.g. ``` a_processes = {'key1': 'value1', 'key2': 42, 'key3': 12.238746374} ``` The example does not work since the value of key `key3` is immediately evaluated, and `foo(20)` is no callable. The way it could work would be to use something like ``` a = {'key1': 'value1', 'key2': 42, 'key3': foo} ``` but here `foo` will miss its arguments. One way to handle this would be to define the dict in the following way ``` a = {'key1': 'value1', 'key2': 42, 'key3': [foo, 20]} ``` with the following processing scheme ``` a_processed = dict([k,process(v)] for k,v in a.items()) ``` in which `process` is a meaningful function checking if its argument is a list, or if the first element is a callable which gets called with the remaining arguments. My question is about a better way/idea to implement my basic idea?