Python JSON solo obtiene claves en el primer nivel

81

Tengo un objeto json muy largo y complicado, ¡pero solo quiero obtener los elementos / claves en el primer nivel!

Ejemplo:

{
    "1": "a", 
    "3": "b", 
    "8": {
        "12": "c", 
        "25": "d"
    }
}

Quiero tener 1,3,8 como resultado!

Encontré este código:

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

Pero imprime todas las claves (también 12 y 25 )

TeNNoX
fuente
5
No, no es así. Imprime las claves y los valores que a su vez incluyen los subdiccionarios. Si solo desea imprimir las claves, no imprima el valor.
Daniel Roseman
1
Pero no quiero claves subdiccionario ... Sé que podría omitir el "valor", esto fue solo para fines de depuración
TeNNoX

Respuestas:

133

Solo haz un simple .keys()

>>> dct = {
...     "1": "a", 
...     "3": "b", 
...     "8": {
...         "12": "c", 
...         "25": "d"
...     }
... }
>>> 
>>> dct.keys()
['1', '8', '3']
>>> for key in dct.keys(): print key
...
1
8
3
>>>

Si necesita una lista ordenada:

keylist = dct.keys()
keylist.sort()
karthikr
fuente
@karthikr cómo obtener la salida como 1, 3, 8.12, 8.25. Básicamente, quiero que la salida tenga claves principales y secundarias separadas por algún delimitador
JKC
21
for key in data.keys():
    print key
Frambot
fuente
3

Como mencionó Karthik, dct.keys()funcionará pero devolverá todas las claves en dict_keystipo, no en listtipo. Entonces, si desea todas las claves en una lista, entonces list(dct.keys())funcionará.

Praveen Manupati
fuente
1

Una buena forma de comprobar si un objeto de Python es una instancia de un tipo es usar isinstance()cuál es la función 'incorporada' de Python. Para Python 3.6:

dct = {
       "1": "a", 
       "3": "b", 
       "8": {
            "12": "c", 
            "25": "d"
           }
      }

for key in dct.keys():
    if isinstance(dct[key], dict)== False:
       print(key, dct[key])
#shows:
# 1 a
# 3 b
Hafizur Rahman
fuente