def _convert_dict_to_list(object_, parent_object, parent_object_key): if isinstance(object_, dict): for key in object_: if isinstance(object_[key], dict): _convert_dict_to_list(object_[key], object_, key) try: keys = [int(key) for key in object_] keys.sort() except (ValueError, TypeError): keys = [] keys_len = len(keys) if (keys_len > 0 and sum(keys) == int( ((keys_len - 1) * keys_len) / 2) and keys[0] == 0 and keys[-1] == keys_len - 1 and check_if_numbers_are_consecutive(keys)): # The dictionary looks like a list so we're going to replace it parent_object[parent_object_key] = [] for key_index, key in enumerate(keys): parent_object[parent_object_key].append(object_[str(key)]) # The list item we just added might be a list itself # https://github.com/amirziai/flatten/issues/15 _convert_dict_to_list(parent_object[parent_object_key][-1], parent_object[parent_object_key], key_index)
def _convert_dict_to_list(object_, parent_object, parent_object_key): if isinstance(object_, dict): for key in object_: if isinstance(object_[key], dict): _convert_dict_to_list(object_[key], object_, key) try: keys = [int(key) for key in object_] keys.sort() except (ValueError, TypeError): keys = [] keys_len = len(keys) if (keys_len > 0 and sum(keys) == int(((keys_len - 1) * keys_len) / 2) and keys[0] == 0 and keys[-1] == keys_len - 1 and check_if_numbers_are_consecutive(keys)): # The dictionary looks like a list so we're going to replace it parent_object[parent_object_key] = [] for key_index, key in enumerate(keys): parent_object[parent_object_key].append(object_[str(key)]) # The list item we just added might be a list itself # https://github.com/amirziai/flatten/issues/15 _convert_dict_to_list(parent_object[parent_object_key][-1], parent_object[parent_object_key], key_index)
def test_numbers_consecutive(self): """Checks if all numbers in a list are consecutive integers""" list_ = [1, 2, 3, 4, 5] actual = check_if_numbers_are_consecutive(list_) self.assertTrue(actual) list_ = [0, 1, 5] actual = check_if_numbers_are_consecutive(list_) self.assertFalse(actual) list_ = [1.0, 2.0, 3.0] actual = check_if_numbers_are_consecutive(list_) self.assertTrue(actual) list_ = range(10) actual = check_if_numbers_are_consecutive(list_) self.assertTrue(actual) list_ = range(10, 0, -1) actual = check_if_numbers_are_consecutive(list_) self.assertFalse(actual)
def _convert_dict_to_list(object_, parent_object, parent_object_key): if isinstance(object_, dict): try: keys = [int(key) for key in object_] keys.sort() except (ValueError, TypeError): keys = [] keys_len = len(keys) if (keys_len > 0 and sum(keys) == int(((keys_len - 1) * keys_len) / 2) and keys[0] == 0 and keys[-1] == keys_len - 1 and check_if_numbers_are_consecutive(keys)): # The dictionary looks like a list so we're going to replace it as one parent_object[parent_object_key] = [object_[str(key)] for key in keys] for key in object_: if isinstance(object_[key], dict): _convert_dict_to_list(object_[key], object_, key)
def _convert_dict_to_list(object_, parent_object, parent_object_key): if isinstance(object_, dict): try: keys = [ int(key) for key in sorted(object_) if not isinstance(object_[key], Iterable) or isinstance(object_[key], str) ] keys_len = len(keys) if (sum(keys) == int(((keys_len - 1) * keys_len) / 2) and keys[0] == 0 and keys[-1] == keys_len - 1 and check_if_numbers_are_consecutive(keys)): parent_object[parent_object_key] = [ object_[str(key)] for key in keys ] except (ValueError, TypeError): for key in object_: if isinstance(object_[key], dict): _convert_dict_to_list(object_[key], object_, key)