首页 > 解决方案 > 根据列表中嵌套字典中的值删除字典元素

问题描述

我正在尝试在列表中删除嵌套字典中的元素。因此,我有一个列表,其中有一个字典作为其元素之一,然后又将字典作为其键值之一。我知道我将在最顶层列表和最底层字典中使用的键,而“中间”字典中的键是可变的。如果底部字典中的值不等于某个值,我想删除“中间”字典中的元素。

我想我需要三个嵌套的 for 循环才能进入每个字典,但无法弄清楚如何删除“中间”字典中的元素。

到目前为止我目前的尝试:

#remove unneccessary elements
def getCleanResults(the_dict1):
    for elem1 in the_dict1:
        the_dict2 = elem['dict1_key']
        for key, elem2 in the_dict2.keys():
            the_dict3 = elem2[key]
            for elem3 in the_dict3:
                if 'keyWanted' in elem3:
                    del elem2
    return the_dict

我拥有的字典列表模板:

a = {
        {'key1':{'key1.1': {'delete': True, 'result': None},
        'key1.2': {'delete': False, 'result': None}},'key2': 3},
        {'key1':{'key1.1': {'delete': False, 'result': None},
        'key1.2': {'delete': True, 'result': None}},'key2': 5}
}

我想删除它们下面的键keyx.x,即,根据'delete'上面True的示例,这将产生:

a = {
    {'key1':{'key1.2': {'delete': False, 'result': None}},'key2': 3},
    {'key1':{'key1.1': {'delete': False, 'result': None}},'key2': 5}
}

如上面的示例所示,他们删除的键是key1.1并且key1.2因此是可变的。

标签: pythonpython-3.xdictionarynested

解决方案


如果您使用正确的字典语法a,您可以遍历第一层键,然后像您说的那样,做一个嵌套循环来遍历第二层键。the_dict1[key1][key2] 中的 VALUE 是最终的字典。我使用 pprint 来帮助可视化字典。

def getCleanResults(the_dict1):
    # iterate through the first keys, cast as a tuple to make a copy of the keys iterator (allows for changing dictionary size during iteration)
    for key1 in tuple(the_dict1.keys()):
        the_dict2 = the_dict1[key1]
        # iterate through the second tier keys
        for key2 in tuple(the_dict2.keys()):
            if the_dict1[key1][key2]['delete']:
                del the_dict1[key1][key2]
    # no need to return a new dict, it was passed by reference, we modified the original dict. If you wanted a copy of the dict, make copy and return it instead.

正确格式的字典:

a = {
    'key1.1': {'key1.1.1': {'delete': True, 'loremipsum': 'perhaps'},
                'key1.1.2': {'delete': False, 'loremipsum': 'perhaps'}},
    'key1.2': {'key1.2.1': {'delete': False, 'loremipsum': 'perhaps'},
            'key1.2.2': {'delete': False, 'loremipsum': 'perhaps'}},
    'key2.1': {'key2.1.1': {'delete': False, 'loremipsum': 'perhaps'},
            'key2.1.2': {'delete': False, 'loremipsum': 'perhaps'}},
    'key2.2': {'key2.2.1': {'delete': False, 'loremipsum': 'perhaps'},
            'key2.2.2': {'delete': True, 'loremipsum': 'perhaps'}}
}

测试:

from pprint import pprint

getCleanResults(a)
print()
pprint(a)

输出:

{'key1.1': {'key1.1.2': {'delete': False, 'loremipsum': 'perhaps'}},
 'key1.2': {'key1.2.1': {'delete': False, 'loremipsum': 'perhaps'},
            'key1.2.2': {'delete': False, 'loremipsum': 'perhaps'}},
 'key2.1': {'key2.1.1': {'delete': False, 'loremipsum': 'perhaps'},
            'key2.1.2': {'delete': False, 'loremipsum': 'perhaps'}},
 'key2.2': {'key2.2.1': {'delete': False, 'loremipsum': 'perhaps'}}}

推荐阅读