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.