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 unflatten(d, separator='_'): new_dict = d.copy() new_dict.clear() 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 _setitem_by_keys(self, keys, value): keylist_util.set_item(self, keys, value)
def test_set_item_with_indexes(self): d = {} keylist_util.set_item(d, 'a', None) self.assertEqual(d, {'a': None}) keylist_util.set_item(d, ['a', 'b', 'c'], 0) self.assertEqual(d, {'a': {'b': {'c': 0}}}) keylist_util.set_item(d, ['a', 'b', 'd'], 1) self.assertEqual(d, {'a': {'b': {'c': 0, 'd': 1}}}) keylist_util.set_item(d, ['a', 'b', 'e', 0], 1) keylist_util.set_item(d, ['a', 'b', 'e', 1], 2) keylist_util.set_item(d, ['a', 'b', 'e', 2], 3) self.assertEqual(d, {'a': {'b': {'c': 0, 'd': 1, 'e': [1, 2, 3]}}}) keylist_util.set_item(d, ['a', 'b', 'e', 0], 4) keylist_util.set_item(d, ['a', 'b', 'e', 1], 5) keylist_util.set_item(d, ['a', 'b', 'e', 2], 6) # keylist_util.set_item(d, ['a', 'b', 'e', 3], 7) # keylist_util.set_item(d, ['a', 'b', 'e', 4], 8) keylist_util.set_item(d, ['a', 'b', 'e', 5], 9) self.assertEqual( d, {'a': { 'b': { 'c': 0, 'd': 1, 'e': [4, 5, 6, None, None, 9] } }}) keylist_util.set_item(d, ['a', 'b', 'e', -11], 10) self.assertEqual( d, {'a': { 'b': { 'c': 0, 'd': 1, 'e': [10, 4, 5, 6, None, None, 9] } }})