Как я могу открыть или отфильтровать вложенный словарь на основе ключей и значений в списке? - PullRequest
0 голосов
/ 27 февраля 2020

Я хотел бы создать словарь подмножеств на основе значений в списке и не уверен, что лучше всего go об этом.

У меня есть словарь, который настроен так:

animal_dict = {'dog': {'color': {'white': 10,
                                 'yellow': 20,
                                 'brown': 30},
                      'attributes': {'legs': 4, 
                                     'teeth': 42}},
               'cat': {'color': {'white': 8,
                                   'calico': 10,
                                   'yellow': 12},
                      'attributes': {'legs': 4, 
                                     'teeth': 30}}
              }

.. и у меня есть некоторые ключевые значения элементов, которые я хотел бы сохранить:

keep_animal = ['dog']
keep_color = ['white', 'yellow']

Мои ожидаемые результаты будут выглядеть так:

{'dog': {'color': {'white': 10,
                   'yellow': 20},
         'attributes': {'legs': 4, 
                        'teeth': 42}}}

спасибо заранее!

1 Ответ

0 голосов
/ 27 февраля 2020

Почему бы не сделать реверс, и вместо того, чтобы оставить все родительские ключи, которые вам не нужны?

unwanted_parent_keys = ['cat', 'brown']
def keep_key(input_dict, drop_keys):
    new_dict = {}
    for k, v in input_dict.items():
        if k in drop_keys:
            continue
        if isinstance(v, dict):
            new_dict[k] = keep_key(v, drop_keys)
        else:
            new_dict[k] = v
    return new_dict

new_animal_dict = keep_key(animal_dict, unwanted_parent_keys)
...