python 从嵌套字典中删除值

dfddblmv  于 2022-12-17  发布在  Python
关注(0)|答案(6)|浏览(181)

我有一个嵌套字典:

{'a': {'m': 1, 'n': 0}, 'b': {'m': 0, 'x': 1}}

是否有一种简单的方法可以删除所有嵌套的零值,使字典变为:

{'a': {'m': 1}, 'b': {'x': 1}}
iyfamqjs

iyfamqjs1#

词典理解:

>>> d = {'a': {'m': 1, 'n': 0}, 'b': {'m': 0, 'x': 1}}
>>> {key: {k:v for k,v in d[key].items() if v != 0} for key in d}

输出:

{'a': {'m': 1}, 'b': {'x': 1}}
aiqt4smr

aiqt4smr2#

一种方法是就地修改字典:

d = {'a': {'m': 1, 'n': 0}, 'b': {'m': 0, 'x': 1}}

for dd in d.values():
    for k, v in list(dd.items()):
        if v == 0:
            dd.pop(k)

print(d)

产出

{'a': {'m': 1}, 'b': {'x': 1}}
o7jaxewo

o7jaxewo3#

您可以使用dict解析:

d = {'a': {'m': 1, 'n': 0}, 'b': {'m': 0, 'x': 1}}
result = {k: {k1: v1 for k1, v1 in v.items() if v1 != 0} for k, v in d.items()}
aiazj4mn

aiazj4mn4#

一线解决方案:

d = {'a': {'m': 1, 'n': 0}, 'b': {'m': 0, 'x': 1}}

d_new = {k: {inner_k: inner_v for inner_k, inner_v in v.items() if inner_v != 0} for k, v in d.items()}

print(d_new)  # Prints: {'a': {'m': 1}, 'b': {'x': 1}}
hc2pp10m

hc2pp10m5#

dict_1 = {'a': {'m': 1, 'n': 0}, 'b': {'m': 0, 'x': 1}}
new_dict_1={}
for key in dict_1.keys():
    for v,k in zip(dict_1[key].values(),dict_1[key].keys()):
        if v != 0 :
            new_dict_1[key] = {k:v}
            
new_dict_1
au9on6nz

au9on6nz6#

您甚至可以尝试将嵌套的dict转换为flat,然后查找值零
代码:

[d[k[0]].pop(k[-1]) for k,v in pd.json_normalize(d).to_dict(orient='records')[0].items() if v==0]
d

相关问题