Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from collections import abc
- def get_from_nested(dic, keys=None, default=None):
- """
- >>> get_from_nested({'hoge': {'fuga': 1}}, keys=['hoge'], default=[])
- {'fuga': 1}
- >>> get_from_nested({'hoge': {'fuga': 1}}, keys=['hoge', 'fuga'], default=[])
- 1
- >>> get_from_nested({'hoge': {'fuga': 1}}, keys=['hoge', 'fuga', 'yeah'], default=[])
- []
- >>> get_from_nested({}, keys=['hoge', 'fuga', 'yeah'], default=[])
- []
- >>> get_from_nested({'hoge': {'fuga': 1}}, keys=[])
- >>> get_from_nested({'hoge': {'fuga': 1}})
- """
- keys = keys or []
- if keys:
- head, *tail = list(keys)
- value = dic.get(head, default)
- if isinstance(value, abc.Mapping) and tail:
- return get_from_nested(value, tail, default=default)
- elif tail:
- # キーは続いてるけどすでに値が見つかってる
- return default
- else:
- return value
- else:
- return default
- if __name__=='__main__':
- import doctest
- doctest.testmod()
Add Comment
Please, Sign In to add comment