我有一个嵌套词典的小示例(在我的例子中是集合默认字典):

all_dict = {'d1': {'a': 2, 'b': 4, 'c': 10}, 
            'd2': {'a': 1, 'b': 23,'c': 0},
            'd3': {'a': 4, 'b': 12,'c': 4},
            'd4': {'a': 0, 'b': 4, 'c': 3},
            'd5': {'a': 4, 'b': 0, 'c': 1}}

我想过滤all_dict中的所有零值.在我的真实数据中,嵌套的词典非常大.我想要任何一般的"Python "解决方案. 我试着go 理解,但失败了. 我想要一些像这样的:

all_dict_filtered = 
           {'d1': {'a': 2, 'b': 4, 'c': 10}, 
            'd2': {'a': 1, 'b': 23},
            'd3': {'a': 4, 'b': 12,'c': 4},
            'd4': {'b': 4, 'c': 3},
            'd5': {'a': 4, 'c': 1}}

任何小费都是很棒的. 感谢您的时间和关注. 保罗市

我有这个,但很丑:

    filtered = defaultdict(dict)
    for k1, v1 in all_dict.items():
        for k2, v2 in v1.items():
            if v2 > 0:
                filtered[k1] = filtered.get(k1, {})
                filtered[k1][k2] = v2
defaultdict(dict,
            {'d1': {'a': 2, 'b': 4, 'c': 10},
             'd2': {'a': 1, 'b': 23},
             'd3': {'a': 4, 'b': 12, 'c': 4},
             'd4': {'b': 4, 'c': 3},
             'd5': {'a': 4, 'c': 1}})

推荐答案

使用DICT理解的简单一行程序:

import pprint

all_dict = {
    'd1': {'a': 2, 'b': 4, 'c': 10},
    'd2': {'a': 1, 'b': 23, 'c': 0},
    'd3': {'a': 4, 'b': 12, 'c': 4},
    'd4': {'a': 0, 'b': 4, 'c': 3},
    'd5': {'a': 4, 'b': 0, 'c': 1}
}

pprint.pprint({k: {key: value for key, value in v.items() if value != 0} for k, v in all_dict.items()})

Output:

{'d1': {'a': 2, 'b': 4, 'c': 10},
 'd2': {'a': 1, 'b': 23},
 'd3': {'a': 4, 'b': 12, 'c': 4},
 'd4': {'b': 4, 'c': 3},
 'd5': {'a': 4, 'c': 1}}

Python相关问答推荐

如何将数据帧中的timedelta转换为datetime

mdates定位器在图表中显示不存在的时间间隔

使用嵌套对象字段的Qdrant过滤

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

如何关联来自两个Pandas DataFrame列的列表项?

对于数组中的所有元素,Pandas SELECT行都具有值

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()

Pandas:使列中的列表大小与另一列中的列表大小相同

了解如何让库认识到我具有所需的依赖项

matplotlib散点图与NaNs和cmap colored颜色 矩阵

Pandas 修正滚动平均

如果属性的类型是联合并使用默认值,为什么属性不能与类同名?

如何基于Pandas 数据帧构建贝壳小区?

用Gekko拟合两个总体的测量值

在HS代码之前获取字符串:数字(不包括HS代码:某个数字)

Django中带有ForeignKey的抽象模型无法按预期继承

在Pandas 数据帧中使用GROUPBY()应用FIND_PEAKS()函数

将DF转换为特定的对象 struct

在Python中优化乘法FOR循环