Search code examples
pythondictionaryfunctools

functools.map alternative for dictionaries


TL;DR

Iteration + in place modification for dict as with functools.map over list

Abstract

As you might know, list objects can easily be processed in a single line by using functools.map, which takes a lambda and a list (or multiple) as parameters. Problem is, I'd like to do the same for dict objects since what I currently have is:

from functools import reduce

items = {
  'a': list(range(20)),
  'b': list(range(40)) 
}
power = lambda base, power: reduce(lambda a,b: a*b, [base for i in range(1,power)])
for key, value in items.items():
  items[key] = [power(i, 3) for i in value]

I don't really like this for as it currently is.


Solution

  • map does not actually do in place modification and it does the same thing as a list comprehension.

    For a dictionary , you could do this:

    items = { k:[power(i,3) for i in v] for k,v in items.items() }