Tengo datos que vienen en este formato, como se muestra a continuación, que creo que es una lista con diccionarios anidados:

data = [{'slipstream_internal/slipstream_hq/27/CLG-MAXFLOW': 580.0, 
         'slipstream_internal/slipstream_hq/29/CLG-MAXFLOW': 1400.0, 
         'slipstream_internal/slipstream_hq/30/CLG-MAXFLOW': 918.0,  
         'slipstream_internal/slipstream_hq/6/CLG-MAXFLOW': 760.0, 
         'slipstream_internal/slipstream_hq/10/CLG-MAXFLOW': 210.0, 
         'slipstream_internal/slipstream_hq/8/CLG-MAXFLOW': 880.0, 
         'slipstream_internal/slipstream_hq/9/CLG-MAXFLOW': 1040.0, 
         'slipstream_internal/slipstream_hq/11/CLG-MAXFLOW': 700.0, 
         'slipstream_internal/slipstream_hq/13/CLG-MAXFLOW': 1030.0, 
         'slipstream_internal/slipstream_hq/14/CLG-MAXFLOW': 1030.0, 
         'slipstream_internal/slipstream_hq/15/CLG-MAXFLOW': 500.0, 
         'slipstream_internal/slipstream_hq/16/CLG-MAXFLOW': 370.0, 
         'slipstream_internal/slipstream_hq/19/CLG-MAXFLOW': 970.0, 
         'slipstream_internal/slipstream_hq/20/CLG-MAXFLOW': 560.0, 
         'slipstream_internal/slipstream_hq/21/CLG-MAXFLOW': 1410.0, 
         'slipstream_internal/slipstream_hq/23/CLG-MAXFLOW': 390.0, 
         'slipstream_internal/slipstream_hq/24/CLG-MAXFLOW': 320.0, 
         'slipstream_internal/slipstream_hq/25/CLG-MAXFLOW': 1200.0, 
         'slipstream_internal/slipstream_hq/26/CLG-MAXFLOW': 815.0, 
         'slipstream_internal/slipstream_hq/31/CLG-MAXFLOW': 1214.0, 
         'slipstream_internal/slipstream_hq/34/CLG-MAXFLOW': 735.0,  
         'slipstream_internal/slipstream_hq/36/CLG-MAXFLOW': 3000.0, 
         'slipstream_internal/slipstream_hq/37/CLG-MAXFLOW': 275.0,  
         'slipstream_internal/slipstream_hq/38/CLG-MAXFLOW': 1690.0, 
         'slipstream_internal/slipstream_hq/39/CLG-MAXFLOW': 270.0}
         , {}]

Siempre hay un diccionario vacío al final que se puede quitar. ¿Alguien puede darme un consejo sobre cómo convertir este tipo de datos en un solo diccionario para que se vea así a continuación?

data = {'slipstream_internal/slipstream_hq/27/CLG-MAXFLOW': 580.0, 
         'slipstream_internal/slipstream_hq/29/CLG-MAXFLOW': 1400.0, 
         'slipstream_internal/slipstream_hq/30/CLG-MAXFLOW': 918.0,  
         'slipstream_internal/slipstream_hq/6/CLG-MAXFLOW': 760.0, 
         'slipstream_internal/slipstream_hq/10/CLG-MAXFLOW': 210.0, 
         'slipstream_internal/slipstream_hq/8/CLG-MAXFLOW': 880.0, 
         'slipstream_internal/slipstream_hq/9/CLG-MAXFLOW': 1040.0, 
         'slipstream_internal/slipstream_hq/11/CLG-MAXFLOW': 700.0, 
         'slipstream_internal/slipstream_hq/13/CLG-MAXFLOW': 1030.0, 
         'slipstream_internal/slipstream_hq/14/CLG-MAXFLOW': 1030.0, 
         'slipstream_internal/slipstream_hq/15/CLG-MAXFLOW': 500.0, 
         'slipstream_internal/slipstream_hq/16/CLG-MAXFLOW': 370.0, 
         'slipstream_internal/slipstream_hq/19/CLG-MAXFLOW': 970.0, 
         'slipstream_internal/slipstream_hq/20/CLG-MAXFLOW': 560.0, 
         'slipstream_internal/slipstream_hq/21/CLG-MAXFLOW': 1410.0, 
         'slipstream_internal/slipstream_hq/23/CLG-MAXFLOW': 390.0, 
         'slipstream_internal/slipstream_hq/24/CLG-MAXFLOW': 320.0, 
         'slipstream_internal/slipstream_hq/25/CLG-MAXFLOW': 1200.0, 
         'slipstream_internal/slipstream_hq/26/CLG-MAXFLOW': 815.0, 
         'slipstream_internal/slipstream_hq/31/CLG-MAXFLOW': 1214.0, 
         'slipstream_internal/slipstream_hq/34/CLG-MAXFLOW': 735.0,  
         'slipstream_internal/slipstream_hq/36/CLG-MAXFLOW': 3000.0, 
         'slipstream_internal/slipstream_hq/37/CLG-MAXFLOW': 275.0,  
         'slipstream_internal/slipstream_hq/38/CLG-MAXFLOW': 1690.0, 
         'slipstream_internal/slipstream_hq/39/CLG-MAXFLOW': 270.0}

Estoy tratando de recorrer las claves y los valores, obviamente, esto falla:

for key, value in data.items():
    print(key, value) 

Falla con:

AttributeError: 'list' object has no attribute 'items'
-2
HenryHub 12 jul. 2021 a las 21:46

3 respuestas

La mejor respuesta

Como dijo @Ibrahim Berber en los comentarios, una solución simple es simplemente tomar data = data[0]. Alternativamente, puede dejarlo y acceder al diccionario que desee con data[0] como lo sugirió @Leonardo Stefan, que sería mi método preferido.

Entonces, su código simplemente se puede cambiar a esto:

for key, value in data[0].items():
    print(key, value) 
0
Rolv Apneseth 12 jul. 2021 a las 18:55

Solución simple si sus datos son una lista con solo dos elementos y el último es un diccionario vacío:

my_dict = data[0]

Solución robusta:

my_dict = {}
# iterate over your data
for entry in data:
    # iterate over keys in the dict
    for key in entry:
        my_dict[key] = entry[key]
0
Maciej M 12 jul. 2021 a las 18:51

Para acoplar cualquier número de diccionarios de la lista en un solo diccionario sin depender del primer índice:

flatten = {}
for n in data:
    flatten.update(n)

Después de crear este diccionario plano, su código a continuación funcionará bien:

for key, value in flatten.items():
    print(key, value)
0
Abstract 12 jul. 2021 a las 19:03