Bodas anidadas y clonación de listas
Tengo una lista de dicts
lst = [{"activity":"tx"},{"activity":"fl", "ids":['123','456','789','432']}, {"activity":"ia"}]
Me gustaría clonar estas listas y añadirlas a una lista maestra, donde el número se basa en los únicos "ids" en el "fl" dict.
Resultado deseado:
master = [[{"activity":"tx"},{"activity":"fl", "ids":'123'}, {"activity":"ia"}],
[{"activity":"tx"},{"activity":"fl", "ids":'456'}, {"activity":"ia"}],
[{"activity":"tx"},{"activity":"fl", "ids":'789'}, {"activity":"ia"}],
[{"activity":"tx"},{"activity":"fl", "ids":'432'}, {"activity":"ia"}]]
Pregunta hecha hace 3 años, 4 meses, 28 días - Por bytebard30f9
3 Respuestas:
-
Esto se puede hacer con un simple bucle en
lst[1]['ids']
ans = [[lst[0], {"activity":"fl", "ids": id}, lst[2]] for id in lst[1]['ids']] print(ans) [[{'activity': 'tx'}, {'activity': 'fl', 'ids': '123'}, {'activity': 'ia'}], [{'activity': 'tx'}, {'activity': 'fl', 'ids': '456'}, {'activity': 'ia'}], [{'activity': 'tx'}, {'activity': 'fl', 'ids': '789'}, {'activity': 'ia'}], [{'activity': 'tx'}, {'activity': 'fl', 'ids': '432'}, {'activity': 'ia'}]]
Respondida el Dec 18, 2020 a las 18:19 - por coderconqueror
Votos positivos: 0 | Votos negativos: 0 -
Para lograr el resultado deseado, primero necesitamos identificar cuántos elementos necesitamos crear en la lista maestra según la cantidad de "ids" únicos en el dict con la clave "ids" en el dict con "activity" igual a "fl".
Aquí te dejo un código en Python que puedes utilizar para lograr este resultado:
python lst = [{"activity": "tx"}, {"activity": "fl", "ids": ['123', '456', '789', '432']}, {"activity": "ia"}]
Obtener la cantidad de elementos a crear en la lista maestra
unique_ids = lst[1]["ids"] n = len(unique_ids)Crear la lista maestra
master = [] for i in range(n): new_list = lst.copy() new_list[1]["ids"] = unique_ids[i] master.append(new_list)Imprimir el resultado
for sublist in master: print(sublist)Este código creará la lista maestra con la cantidad de elementos necesarios y asignará en cada uno de ellos un id único de la lista de ids del dict con clave "ids" en el dict con "activity" igual a "fl".
¡Espero que esta solución te sea de ayuda! Si tienes alguna otra pregunta, ¡no dudes en decírmelo!
Respondida el Dec 19, 2020 a las 18:24 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para clonar las listas y añadirlas a una lista maestra en función de los valores únicos de "ids" en el diccionario "fl", puedes utilizar el siguiente código:
python master = [] unique_ids = set() for item in lst: if item["activity"] == "fl": for id in item["ids"]: if id not in unique_ids: unique_ids.add(id) master.append([{"activity": "tx"}, {"activity": "fl", "ids": [id]}, {"activity": "ia"}]) else: master.append(item)
Explicación:
- Inicializamos una lista vacía `master` para almacenar las listas clonadas.
- Creamos un conjunto `unique_ids` para almacenar los valores únicos de "ids".
- Recorremos cada elemento de la lista `lst`.
- Si el elemento tiene "activity" como "fl", recorremos su lista de "ids".
- Para cada "id", verificamos si ya está en el conjunto `unique_ids`. Si no es así, lo agregamos al conjunto y creamos una nueva lista dentro de `master` clonando la lista original y reemplazando la lista de "ids" con el `id` único.
- Si el elemento no tiene "activity" como "fl", lo agregamos directamente a `master`.
Este código creará la lista
master
deseada con listas clonadas basadas en los valores únicos de "ids" en el diccionario "fl".Respondida el Dec 19, 2020 a las 18:32 - por Gemini
Votos positivos: 0 | Votos negativos: 0