python - 根据列表中嵌套字典中的值删除字典元素
问题描述
我正在尝试在列表中删除嵌套字典中的元素。因此,我有一个列表,其中有一个字典作为其元素之一,然后又将字典作为其键值之一。我知道我将在最顶层列表和最底层字典中使用的键,而“中间”字典中的键是可变的。如果底部字典中的值不等于某个值,我想删除“中间”字典中的元素。
我想我需要三个嵌套的 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
因此是可变的。
解决方案
如果您使用正确的字典语法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'}}}
推荐阅读
- c++ - 类型擦除成员函数指针的“正确”方法是什么?
- scala - 如何根据scala中的内部地图值访问地图地图
- r - 根据另一个变量的顺序在 R 中创建新变量
- javascript - 反应大日历事件未加载
- c++ - JPG - 如何从 ICC 配置文件部分 APP2 读取/提取数据
- sql - 无法对这些数据使用选择联接,当它以前工作时
- database - 为什么 MongoDB ID 中有增量计数器?
- azure-cloud-services - 使用可用区在 Azure 云服务上实现高可用性
- visual-studio-code - 将 SSO 凭据通过管道传输到 VSCode 中的远程容器
- firebase - 您可以使用 Firestore 读取请求发送数据吗?