def insert_constructor(loader: SafeLoader, node: Node) -> list: if isinstance(node.value[0], ScalarNode): info = InsertInfo( sequence=loader.construct_object(node.value[0], deep=True)) else: info = InsertInfo( *loader.construct_sequence(node.value[0], deep=True)) current_list: List[Any] = info.sequence # already constructed input_list: List[Any] = [ loader.construct_object(n, deep=True) for n in node.value[1:] ] if info.replace_format is None and info.positions is None: return current_list + input_list def item_id(item: Any, idx: int) -> int: return idx if info.replace_format is None else formatter.format( info.replace_format, l=item) # ordered result_dict = { item_id(item, idx): item for idx, item in enumerate(current_list) } input_dict = { item_id(item, idx + len(result_dict)): item for idx, item in enumerate(input_list) } to_pos = {} to_end = [] for input_pos, (input_id, input_item) in zip_longest(info.positions or [], input_dict.items()): if input_pos is not None: result_dict.pop(input_id, None) to_pos[input_pos] = input_item elif input_id in result_dict: result_dict[input_id] = input_item else: to_end.append(input_item) result_list = list(result_dict.values()) + to_end for item in sorted(to_pos): result_list.insert(item, to_pos[item]) return result_list