def invert(d, flat=False): new_dict = clone(d, empty=True) for key, value in d.items(): if type_util.is_list_or_tuple(value): _invert_list(new_dict, key, value, flat) else: _invert_item(new_dict, key, value, flat) return new_dict
def unflatten(d, separator='_'): new_dict = clone(d, empty=True) keys = list(d.keys()) for key in keys: value = d.get(key, None) new_keys, new_value = _unflatten_item(key, value, separator) keylist_util.set_item(new_dict, new_keys, new_value) return new_dict
def filter(d, predicate): if not callable(predicate): raise ValueError('predicate argument must be a callable.') new_dict = clone(d, empty=True) keys = list(d.keys()) for key in keys: value = d.get(key, None) if predicate(key, value): new_dict[key] = value return new_dict
def flatten(d, separator='_'): new_dict = clone(d, empty=True) return _flatten_item(d, base_dict=new_dict, base_key='', separator=separator)