检查是否存在嵌套字典

时间:2018-02-23 13:24:55

标签: python dictionary

我有两个这样的词典:

my_nested_dictionary= {'key5': 'value5',
                       'key6': {'inner_key6_1': 'inner_value6_1'},
                       'key7': 'value7'}

empty_dict = {}

如果我想使用empty_dict的内部字典更新my_nested_dictionary,我可以使用此代码执行此操作:

for key, value in my_nested_dictionary.iteritems():
    if key=='key6':
        empty_dictionary.update(value)

但是,有没有通用的方法可以在不使用“条件”的情况下执行此操作。硬编码只有一个键?如果我在my_nested_dictionary中有更多嵌套词典作为更多键的值,是否有办法立即更新empty_dictionary所有键?

3 个答案:

答案 0 :(得分:2)

如果要检查嵌套字典;

for key, value in my_nested_dictionary.iteritems():
    if isinstance(value, dict):
        empty_dictionary.update(value)

答案 1 :(得分:2)

如果您不需要更新现有字典,只想要一个只包含嵌套字典的字典,那么您可以这样做:

only_nested = {k: v for k, v in my_nested_dictionary.items() if isinstance(v, dict)}

例如,给定此代码:

my_nested_dictionary = {'key5': 'value5',
                    'key6': {'inner_key6_1': 'inner_value6_1'},
                    'key7': 'value7',
                    'key8': {'inner_key8_1': 'inner_value8_1'}}

only_nested = {k: v for k, v in my_nested_dictionary.items() if isinstance(v, dict)}
print(only_nested)

我们得到了这个输出:

{'key6': {'inner_key6_1': 'inner_value6_1'}, 'key8': {'inner_key8_1': 'inner_value8_1'}}

答案 2 :(得分:1)

如果您想在不使用if的情况下在一个语句中获取密钥,则可以像(Python 3)一样进行:

output = list(filter(lambda key: isinstance(my_nested_dictionary[key], dict), my_nested_dictionary.keys()))

输出将类似于['键7']。

从那里,您可以根据需要从原始字典中查找vales。这样您就不必拥有相同对象的多个副本。