alancalvitti
alancalvitti

Reputation: 476

Map a function to values of specified keys in dictionary

Is there a convenient way to map a function to specified keys in a dictionary?

Ie, given

d = {"a": 1, "b": 2, "c": 3}

would like to map a function, say f, to keys "a" and "c":

{"a": f(1), "b": 2, "c": f(3)}

EDIT

Looking for methods that will not update the input dictionary.

Upvotes: 2

Views: 1178

Answers (1)

DeepSpace
DeepSpace

Reputation: 81684

You can use a dictionary comprehension:

output_dict = {k: f(v) for k, v in d.items()}

Note that f(v) will be evaluated (called) immediately and its return values will be stored as the dictionary's values.

If you want to store the function and call it later (with the arguments already stored) you can use functools.partial:

from functools import partial


def f(n):
    print(n * 2)


d = {"a": 1, "b": 2, "c": 3}

output_dict = {k: partial(f, v) for k, v in d.items()}

output_dict['b']()
# 4

If you only want specific keys mapped you can of course not use .items and just override those keys:

d['a'] = partial(f, d['a'])

or more generalized

keys = ('a', 'c')
for key in keys:
    d[key] = partial(f, d[key])

Upvotes: 5

Related Questions