python - 从嵌套字典中删除值为零的项目
问题描述
这是一个嵌套字典:
fdict = {}
fdict['apple'] = {}
fdict['banana'] = {}
fdict['apple']['green'] = 5
fdict['apple']['red'] = 0
fdict['banana']['light_yellow'] = 10
fdict['banana']['dark_yellow'] = 0
fdict['appraisal round'] = 1
{'apple': {'green': 5, 'red': 0},
'banana': {'light_yellow': 10, 'dark_yellow': 0},
'appraisal round': 1}
从这个嵌套字典中删除值为零的键和值对的最pythonic方法是什么,从而得到以下字典结果:
{'apple': {'green': 5}, 'banana': {'light_yellow': 10}, 'appraisal round': 1}
注意:appraisal round
键本身没有字典作为值。
这是我迄今为止实施的:
overall_dict = {}
for key in [key for key in fdict.keys() if key != 'appraisal round']:
new_dict = {k:v for k,v in fdict[key].items() if v != 0}
overall_dict[key] = new_dict
overall_dict['appraisal round'] = 1
但是,使用临时字典,构建一个全新的字典并重新添加appraisal round
似乎不是一个干净的方法。有没有办法更有效地修改现有字典?
解决方案
假设您不知道具有非 dict 类型的键,解决方案可能是:
fdict = {}
fdict['apple'] = {}
fdict['banana'] = {}
fdict['apple']['green'] = 5
fdict['apple']['red'] = 0
fdict['banana']['light_yellow'] = 10
fdict['banana']['dark_yellow'] = 0
fdict['appraisal round'] = 1
def non_zero_value(item):
k, v = item
return v != 0
result = {}
for k, v in fdict.items():
if isinstance(v, dict):
result[k] = dict(filter(non_zero_value, v.items()))
else:
result[k] = v
print(result)
# {'apple': {'green': 5}, 'banana': {'light_yellow': 10}, 'appraisal round': 1}
推荐阅读
- android - Firebase 侦听器跳过
- java - 按字段的日期对 Array 对象进行排序
- php - 显示具有不同颜色的记录
- python-3.x - n_jobs = -1 等效于 keras
- histogram - 如何从 TTree 中绘制 COLZ TH2F?
- python-3.x - python-pptx中的文本方向调整
- angular - 查看类的属性
- javascript - how to pass the multi-select values from JSP to controller without making use of any Model
- scala - 如何在 MLReader 上创建通用函数
- node.js - 网络实时分析仪表板:应该使用哪些技术?(节点/django、cassandra/mongodb...)