@TaskTemplate()
def transpose_dicts_2_lists(dataset: JsonDictDataset, id_key: str = ID_KEY) -> JsonListDataset:
input_dataset: dict[str, JsonDict] = dataset.to_data()
output_dataset: dict[str, JsonList] = {}
for name, item in input_dataset.items():
for key, val in item.items():
if key not in output_dataset:
output_dataset[key] = []
if not obj_or_model_content_isinstance(val, list):
val = [val]
for item_index, val_item in enumerate(val):
if obj_or_model_content_isinstance(val_item, dict):
val_dict: dict[str, Json] = {
id_key: f'{name}_{item_index}' if item_index > 0 else name
}
assert id_key not in val_item
val_dict |= val_item
output_dataset[key].append(val_dict)
else:
output_dataset[key].append(val_item)
return JsonListDataset(output_dataset)