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