Buscar clave en un diccionario anidado mezclado con listas

Dominio de datos

Recupero datos JSON de una API. El conjunto de datos es grande y anidado. Puedo acceder a la Datenreihenclave así:

jsondata.get("Ergebnis")[0].get("Kontakte").get("Datenreihen")

Como puede ver, se trata de una combinación de diccionarios y listas.

Intenté lo siguiente, pero con las listas no funciona :-(.

def recursive_lookup(k, d):
    if k in d:
        return d[k]
    for v in d.values():
        if isinstance(v, dict):
            return recursive_lookup(k, v)
    return None

# Works
recursive_lookup("Ergebnis", jsondata)

# Returns None
recursive_lookup("Datenreihen", jsondata)

¿Existe una manera fácil de acceder y escribir en mi diccionario, sin importar cuán profundamente esté anidado mi objeto?

Estos son datos de ejemplo:

{
    "Success":true,
    "Ergebnis":[
       {
          "ErgA1a: KPI Zeitreihe":{
             "Message":"",
             "MitZielgruppe":true,
             "Beschriftung":[
                "2019 KW 27",
                "2019 KW 28",
                "2019 KW 29"
             ],
             "Datenreihen":{
                "Gesamt":{
                   "Name":"Sympathie [#4]\n(Sehr sympathisch, Sympathisch)",
                   "Werte":[
                      39.922142815641145,
                      37.751410794385762,
                      38.35504885993484
                   ]
                }
             }
          }
       }
    ],
    "rest":[
       {
          "test":"bla"
       }
    ]
 }

 data.get("ErgebnisseAnalyse")[0].get("ErgA1a: KPI Zeitreihe")

recursive_lookup("ErgA1a: KPI Zeitreihe", data)
DarrylG

Función recursiva para encontrar valor en el diccionario anidado según el campo clave

Código

def find_item(obj, field):
    """
    Takes a dict with nested lists and dicts,
    and searches all dicts for a key of the field
    provided.
    """
    if isinstance(obj, dict):
        for k, v in obj.items():
            if k == field:
                yield v
            elif isinstance(v, dict) or isinstance(v, list):
                yield from find_item(v, field)
    elif isinstance(obj, list):
        for v in obj:
            yield from find_item(v, field)

Uso

value = next(find_item(dictionary_object, field), None)

Prueba

# Nested dictionary
dic = {
    "a": [{"b": {"c": 1}},
          {"d": 2}],
     "e": 3}

# Values form various fields
print(next(find_item(dic, "a"), None))  # Output: [{'b': {'c': 1}}, {'d': 2}]
print(next(find_item(dic, "b"), None))  # Output: {'c': 1}
print(next(find_item(dic, "c"), None))  # Output: 1
print(next(find_item(dic, "d"), None))  # Output: 2
print(next(find_item(dic, "e"), None))  # Output: 3
print(next(find_item(dic, "h"), None))  # Output: None

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

buscar la clave en un diccionario anidado y asociarla a la ruta de recursividad Python 3

buscar la clave en un diccionario anidado y asociarla a la ruta de recursividad Python 3

Listas anidadas en un diccionario anidado

Accediendo a clave, valor en un diccionario anidado

¿Cómo obtener todos los valores con la misma clave en un diccionario anidado en Python?

Modifique claves y valores en un diccionario anidado con listas dentro de él

¿Cómo acceder a los valores clave en un diccionario de Python anidado con variables?

Cómo agregar listas en un diccionario anidado en Python

creando un diccionario con dos listas cuando una clave debe tener dos valores en Python

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

¿Agregar una clave faltante en un diccionario anidado?

Sumar valores de una clave en un diccionario anidado

Cómo buscar un diccionario anidado y no preocuparse por la clave de nivel superior

Devuelve valores de cierta clave en un diccionario anidado y forma un diccionario de jerarquía

Buscar clave en Json anidado en Python

Python 2.7 Buscar en el diccionario A con la clave del Diccionario B

Extraer varias listas de un diccionario anidado

Extraer varias listas de un diccionario anidado

Asigne varias listas (actuando como valores) con una sola lista (actuando como clave) para crear un diccionario en Python

¿Cómo asocio un valor en un diccionario con un valor en un diccionario anidado?

Obtener la clave en el diccionario anidado

Detecta cambios en un diccionario anidado con Python

Javascript: agregue pares clave / valor en un diccionario anidado; la clave y el valor son variables

Javascript: agregue pares clave / valor en un diccionario anidado; la clave y el valor son variables

Convierta un diccionario anidado en un diccionario

Diccionario anidado con valor predeterminado en la primera clave en Python

Cree un diccionario anidado con varias listas de diferentes tamaños

agregar muchas listas en un diccionario anidado en bucle for en python

¿Hay alguna forma de acceder a un diccionario anidado con una clave de cadena concatenada?

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Pandas의 CSV 파일을 Pandas 데이터 프레임으로 가져 오기

  3. 3

    uitableview delete button image in iOS

  4. 4

    Manera correcta de agregar referencias al proyecto C # de modo que sean compatibles con el control de versiones

  5. 5

    Swift / Firebase : Facebook 사용자가 계정을 만들 때 Firebase 데이터베이스에 제대로 저장하려면 어떻게해야합니까?

  6. 6

    caída condicional de filas desde un marco de datos de pandas

  7. 7

    Link library in Visual Studio, why two different ways?

  8. 8

    Pagination class not getting applied in html

  9. 9

    Que signifie Decimal (-1)?

  10. 10

    UIButton textLabel with different fonts

  11. 11

    WPF pleine largeur DataGridColumn sur la largeur de DataGrid

  12. 12

    Opción de máquina virtual no reconocida 'MaxPermSize = 512m' cuando se ejecuta Zeppelin

  13. 13

    matplotlib로 그래프를 그리는 동안 커서 위치에서 날짜 / 시간을 볼 수 없습니다. "DateFormatter에서 x = 0 값을 찾았습니다"라는 오류가 발생합니다.

  14. 14

    ¿Es posible en Windows evitar que otras aplicaciones se enganchen en las DLL del sistema?

  15. 15

    Error de la base de datos de Android Firebase: Permiso denegado al depurar en un teléfono

  16. 16

    Pandas: suma filas de DataFrame para columnas dadas

  17. 17

    ggplot2: gráfico con líneas y puntos para problemas de leyenda de dos conjuntos de datos

  18. 18

    ¿Cómo especificar el puerto en el que se aloja una aplicación ASP.NET Core?

  19. 19

    Recherche de la position d'index d'une valeur dans r dataframe

  20. 20

    GPU를 사용하여 ffmpeg 필터의 처리 속도를 가속화하는 방법은 무엇입니까?

  21. 21

    nested observables executed one after the other after termination

CalienteEtiquetas

Archivo