from boltons.iterutils import is_scalar, remap garbagey = {'attributes': {'vars': {'network': {'addresses': []}}, 'characteristics': {'chars': 'abc', 'misc_obj': {}, 'others': [1, 2]} } } def drop_empty(p, k, v): return is_scalar(v) or bool(v) remap(garbagey, visit=drop_empty) # {'attributes': {'characteristics': {'chars': 'abc', 'others': [1, 2]}}}