@bickford
Python backend, неуверенный mid

Как получить словарь с определенным ключом из массы вложенных словарей?

Приветствую. Я получаю словарь такого типа:
{
    "data": {
        "FirstKey": {
            "SecondKey": {
                "AnyKey": "something",
                "AnyKey2": "something",
                "AnyKey3": "something",
                "Body": {
                    "Response": {
                        "Result": {
                            "Xxx": {
                                "Any": "true"
                            },
                            "Zzz": {
                                "Bool": "true"
                            },
                            "INeedThisDict": {
                                "SomeInfo": "true"
                                "SomeInfo2": {
                                    "Key": "Value",
                                    "Key2": "Value2",
                                },
                            },
                            "Yyy": "000",
                            "Ccc": "111",
                            "Status": "200",
                            "Error": "no"
                        }
                    }
                }
            }
        }
    }

Как получить словарь с ключом INeedThisDict? Причем исходный словарь может быть разной вложенности, поэтому забирать значение по индексу нельзя, ибо искомый словарь может находиться уже в другом месте.
  • Вопрос задан
  • 438 просмотров
Решения вопроса 1
LaRN
@LaRN
Senior Developer
Можно пройтись рекурсивно по словарю до первого совпадения, т.к. нет гаратнии что один и тот же ключ не может быть на разных уровнях.

Например так:
def find_key(dct, key):
    try:
        if dct.get(key):
            return dct[key]
        else:
            for k in dct.values():
                val = find_key(k, key)
                if val:
                    return val
    except:
        return


Для проверки:

Resp = dict()
Resp["abc"] = dict()
Resp["2"] = dict()
Resp["abc"]["find"] = 1
Resp["2"]["find_1"] = 2

print(find_key(Resp, "find_1"))

результат 2.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы