Skip to content

Instantly share code, notes, and snippets.

@nballenger
Created October 19, 2018 02:33
Show Gist options
  • Save nballenger/f2116aef22ddd735d722f0ef7cd79874 to your computer and use it in GitHub Desktop.
Save nballenger/f2116aef22ddd735d722f0ef7cd79874 to your computer and use it in GitHub Desktop.
What about reducing over getitem doesn't work?
$ python3 -q
>>> data_obj = { 
...     'alpha': { 
...         'bravo': [
...             {'charlie': 1}, 
...             {'delta': 2},
...         ]
...     }
... }
>>> 
>>> node_keys = ['alpha', 'bravo', 0, 'charlie']
>>> 
>>> from functools import reduce
>>> from operator import getitem
>>> 
>>> reduce(getitem, data_obj, node_keys)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not str
>>> 
>>> data_obj[node_keys[0]][node_keys[1]][node_keys[2]][node_keys[3]]
1
>>> getitem(
...     getitem(
...         getitem(
...             getitem(data_obj, node_keys[0]),
...             node_keys[1]
...         ), node_keys[2]
...     ), node_keys[3]
... )
1
>>>
>>> data_obj.__getitem__(node_keys[0])\
...         .__getitem__(node_keys[1])\
...         .__getitem__(node_keys[2])\
...         .__getitem__(node_keys[3])
1
>>>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment