Python проверяет, существуют ли ключи внутри ключей в словаре, и продолжает в противном случае

#python #python-3.x

Вопрос:

У меня есть словарь с несколькими ключами, внутри которых есть другие ключи, а также списки. Пример:

 dictABC=
{
    "name": "bob",
    "id": "abs",
    "meta": {
        "v": "2",
        "update": "00"
    },
    "other": {
        "age": [
            {
                "a": "test",
                "b": "test1",
                "c": "test2"
            },
            {
                "a": "user",
                "b": "user1",
                "c": "user2"
            }
        ]
      }
    }
 

Я хочу, чтобы процедура проверяла, существуют ли некоторые ключи, если да, то получала значение, если нет, продолжайте проверять следующий, пока не будет проверен весь список ключей. В конце я создам словарь с теми ключевыми значениями, которые существуют в dictABC

Как я могу это сделать? Как я могу проверить dictABC["other"]["age"][0]["a"] , существует ли форма ключа внутри списка?

В настоящее время у меня есть

 list_keys = ["name", "update", "a"]
keys = []
values = []
for k in list_keys:
    if k in dictABC:
        keys.append(k)
        values.append(dictABC[k])
newDict = {k:v for k,v in zip(keys, values)}
print(new)
 

Комментарии:

1. Чего вы хотите, не совсем ясно. Вы хотите получить полный список ключей? Убедитесь, что ключи существуют для запуска dictABC["other"]["age"][0]["a"] ? Какова ваша цель с точки зрения применения? Каков ожидаемый результат?

2. Существует: pypi.org/project/jsonpath-ng

3. @mozway спасибо за ответ, я хочу иметь цикл, который проверяет некоторые ключи (например, ключ «a», который находится внутри списка и ключа) и создает новый словарь с существующими значениями ключей. Я тоже пробовал попробовать/кроме, но он останавливается после того, как один из ключей не существует. И я хочу, чтобы все ключи в списке были проверены

4. Что делать, если один и тот же ключ встречается несколько раз, на разных уровнях или в разных ветвях дерева данных?

5. @Arne хороший вопрос, мне просто нужен ключ для определенного уровня; нужно ли мне реализовывать операторы IF для каждого ключа или есть способ зацикливания?