python JSON отримує ключі лише на першому рівні


81

У мене дуже довгий і складний json-об'єкт, але я хочу отримати елементи / ключі лише на першому рівні!

Приклад:

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

Я хочу отримати 1,3,8 в результаті!

Я знайшов цей код:

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

Але він друкує всі клавіші (також 12 і 25 )


5
Ні, це не так. Він друкує ключі та значення, які самі включають підсловники. Якщо ви просто хочете надрукувати ключі, не друкуйте значення.
Даніель Роузман,


1
Але я не хочу підсловникових ключів ... Я знаю, що міг опустити ", значення" це було лише з метою налагодження
TeNNoX,

Відповіді:


133

Просто зробіть просте .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
>>>

Якщо вам потрібен відсортований список:

keylist = dct.keys()
keylist.sort()

@karthikr як отримати вихід як 1, 3, 8.12, 8.25. В основному я хочу вихід мати батьківські і дочірні ключі розділений деякий роздільник
Jkc


3

Як згадував Картік, dct.keys()це спрацює, але він поверне всі клавіші в dict_keysтипі, не в listтипі. Отже, якщо вам потрібні всі ключі у списку, тоді це list(dct.keys())буде працювати.


1

Хорошим способом перевірити, чи є об'єкт python екземпляром типу, є використання isinstance()"вбудованої" функції Python. Для 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.