Python — получение ключей и подразделов из вложенного словаря

#python #dictionary #get #key

#python #словарь #получить #Клавиша

Вопрос:

У меня есть фрагмент файла JSON, и поскольку JSON является dict, я хочу получить из него ключи и подразделы.

JSON-код:

 {
    "Image": {
        "URL / Path": "",
        "Max_Width": 300
    },
    "Font": {
...
  

Чего я хочу достичь: ["Image", "Url / Path", "Max_Width", "Font", ..."]

Что у меня есть в настоящее время: ["Image", "Font", ...] . Я использовал l=[y for y in __import__('json').load(open(r'FilePath', 'r')).keys()];l для этого.

Пожалуйста, помогите.

Ответ №1:

Если вы знаете глубину словаря, вы можете просто сделать что-то вроде этого:

 data = {
        "Image": {
            "URL / Path": "",
            "Max_Width": 300
        },
        "Font": {}
}
all_keys = []
for k in data:
    all_keys.append(k)
    for k1 in data[k]:
        all_keys.append(k1)
  

Это переходит на второй уровень, перебирает каждый ключ и добавляет его к результату. Однако, если у вас в вашем JSON есть несколько (и переменные количества) уровней, вам придется использовать рекурсию, чтобы получить все ключи.

Ответ №2:

Приведенная ниже функция возвращает все ключи в dict dct независимо от глубины:

 def accumulate_keys(dct): # returns all the keys
    key_list = []
    def accumulate_keys_recursive(dct): # will accumulate keys in key_list
        for key in dct.keys():
            if isinstance(dct[key], dict):
                accumulate_keys_recursive(dct[key])
            else:
                key_list.append(key)
    accumulate_keys_recursive(dct)
    return key_list
print(accumulate_keys(dct))