删除嵌套字典中不包含任何值的键

2024-09-25 08:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一句话:

dict_2 = {
    'key1': {'subkey1': 2, 'subkey2': 7, 'subkey3': 5},
    'key2': {'subkey1': None, 'subkey2': None, 'subkey3': None},
}

我期待着从subkeys中的那些None值中清除{},方法是删除带有嵌套dict的整个键:

简而言之,我的输出应该是:

^{pr2}$

我尝试的是:

glob_dict={}

for k,v in dict_2.items():
    dictionary={k: dict_2[k] for k in dict_2 if not None (dict_2[k]
['subkey2'])}
    if bool(glob_dict)==False:
        glob_dict=dictionary
    else:
        glob_dict={**glob_dict,**dictionary}

print(glob_dict)

我目前的输出是:

TypeError: 'NoneType' object is not callable

我不太确定循环是否是去除嵌套循环的None值的最佳方法,而且我也不确定如何表达我想要去除None值。在


Tags: 方法innonefordictionaryifnotdict
2条回答
dict_2={'key1':{'subkey1':2,'subkey2':7,'subkey3':5} ,'key2':{'subkey1':None,'subkey2':None,'subkey3':None}}

d = {}
for k, v in dict_2.iteritems():
    if any(v.values()):
        d[k] = v
print d

结果:

^{pr2}$

删除所有None和后续空dict的递归解决方案可以如下所示:

代码:

def remove_empties_from_dict(a_dict):
    new_dict = {}
    for k, v in a_dict.items():
        if isinstance(v, dict):
            v = remove_empties_from_dict(v)
        if v is not None:
            new_dict[k] = v
    return new_dict or None

测试代码:

^{pr2}$

结果:

{'key1': {'subkey1': 2, 'subkey2': 7, 'subkey3': 5}}

相关问题 更多 >