Search code examples
pythondictionary

itemgetter for nested dict key value


I'd like to get a nested dict value with itemgetter:

from operator import itemgetter

dct = {"name": {"en": "John"}}
getter = itemgetter("name", "en")
getter(dct)

The code gives me error:

Traceback (most recent call last):
  File "/Users/alber.aleksandrov/PycharmProjects/Playground/sa/разное.py", line 5, in <module>
    getter(dct)
KeyError: 'en'

How should I use itemgetter to make it work?


Solution

  • you could go with functools reduce function

    from functools import reduce, partial
    
    dct = {"name": {"en": "John"}}
    keys = ["name", "en"]
    reduce(dict.get, keys, dct)
    

    output:

    Jonh
    

    as a partial function

    def get_itemgetter(keys):
        def partial_func(dtc):
            return reduce(dict.get, keys, dtc)
        return partial_func
    
    itemgetter = get_itemgetter(keys)
    itemgetter(dct)