Agregar nivel al diccionario anidado existente (árbol)

jagadishreddy bommareddy

Tengo un diccionario anidado (árbol) con valores dados.

nodes = [{'id': 20, 'child': [{'id': 21, 'child': [{'id': 23, 'child': [{'id': 31}]}, {'id': 24}]}, {'id': 22}]}, {'id': 25, 'child': [{'id': 32}]}]

Me gusta actualizarlo con una nueva clave y valor (nivel: entero) en cada dicitonario. El nivel debe especificar el orden anidado (se muestra a continuación)

nodes = [{'id': 20, 'child': [{'id': 21, 'child': [{'id': 23, 'child': [{'id': 31}], 'level': 2}, {'id': 24}], 'level': 1}, {'id': 22}], 'level': 0}, {'id': 25, 'child': [{'id': 32}], 'level': 3}]

Intenté obtener la solución utilizando la recursividad. Pero debido al bucle for, esta solución es incorrecta.

counter=0
def abc(list):
    global counter
    for i in list:
        if 'level' not in list:
            if 'child' in i:
                i.update(level=counter)
                counter += 1
                abc(i['child'])
    return list
Hrabal

Puede usar la recursividad para lograr eso:

nodes = [{'id': 20, 'child': [{'id': 21, 'child': [{'id': 23, 'child': [{'id': 31}]}, {'id': 24}]}, {'id': 22}]}, {'id': 25, 'child': [{'id': 32}]}]

def set_level(obj, level=0):
    if isinstance(obj, list):
        # If the function is called on a list, we call the function on each element
        return [set_level(el) for el in obj]
    if isinstance(obj, dict):
        # If the function in called on a dict, we add the level
        obj['level'] = level
        if "child" in obj:
            # If the object have a sublevel, we call the function
            # for this sublevel
            obj["child"] = [set_level(c, level=level+1) for c in obj["child"]]
        return obj


nodes = set_level(nodes)

Esta será la salida:

[
  {
    "child": [
      {
        "child": [
          {
            "child": [
              {
                "id": 31,
                "level": 3
              }
            ],
            "id": 23,
            "level": 2
          },
          {
            "id": 24,
            "level": 2
          }
        ],
        "id": 21,
        "level": 1
      },
      {
        "id": 22,
        "level": 1
      }
    ],
    "id": 20,
    "level": 0
  },
  {
    "child": [
      {
        "id": 32,
        "level": 1
      }
    ],
    "id": 25,
    "level": 0
  }
]

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Agregar nuevo campo al anidado existente

Agregar los valores al diccionario ya existente

Agregar nuevos datos al diccionario existente

Agregar nuevos datos al diccionario existente

Agregar elementos de lista anidados al diccionario anidado

Agregar un nuevo valor clave al diccionario existente en Python

Agregar al diccionario existente en la plantilla basada en Cheetah

Python agregar diccionario al diccionario existente - AttributeError: el objeto 'dict' no tiene atributo 'agregar'

Python crea la clave para el diccionario anidado y de nivel superior al mismo tiempo

Árbol binario del diccionario anidado en Python

¿Cómo agregar una nueva clave en el diccionario existente y derivar un diccionario anidado en Python?

Agregar diccionario al diccionario incrustado

Diccionario de listas al diccionario anidado

Actualizar / Agregar al diccionario

Oficial: error al agregar un párrafo de nivel 1 a una diapositiva existente

Hacer coincidir las claves de dos diccionarios (uno anidado) y luego agregar valor al diccionario anidado interno

Agregar al alias existente

Agregar al alias existente

Cómo agregar valores de lista al diccionario existente en Python

Agregar una clave no existente al diccionario con la declaración if (Python)

Resumir árbol (objeto anidado) en un nivel determinado

¿Agregar relleno a los valores del diccionario anidado?

Agregar atributos al campo anidado

Manipular un diccionario / árbol de listas anidado en Python 3

Sangría del contenido de cada nivel de un diccionario anidado

agregar un diccionario a un diccionario anidado Python 3.6

Agregar un nuevo elemento de diccionario a un diccionario anidado

Acceso dinámico al diccionario anidado

Accediendo al diccionario json anidado usando Python

TOP Lista

CalienteEtiquetas

Archivo