【问题标题】:Remove non zero values from dictionary of dictionary in python从python中的字典字典中删除非零值
【发布时间】:2021-09-27 12:23:13
【问题描述】:

我有一个字典字典,如下所示如何从中删除非零键、值

{'abcdef': {'1987': 0.0,
  '0544': 0.0,
   '0568': 0.0,
  '3000': 0.0,
  '7095': 0.0,
  '75609': 1.0,
  '56565': 2.0,
  '98656': 3.0,
  '756095': 0.0,
  '23432': 0.0},
  'fgrd': {'1987': 0.0,
  '0544': 0.0,
   '0568': 0.0,
  '3000': 0.0,
  '7095': 0.0,
  '75609': 1.0,
  '56565': 2.0,
  '98656': 3.0,
  '756095': 0.0,
  '23432': 0.0}

}

在下面尝试过, {key:val for key, val in my_dict.items() if val.values() != 0.0}

并得到 AttributeError: 'float' object has no attribute 'values',

谢谢

【问题讨论】:

  • 显示您的代码,然后我们可以帮助修复它。
  • {k_o: {k_i: v_i for k_i, v_i in v_o.items() if not v_i} if isinstance(v_o, dict) else v_o for k_o, v_o in d.items()}
  • 这行得通。非常感谢

标签: python dictionary key


【解决方案1】:

试试这个:

dct = {'abcdef': {'1987': 0.0,
  '0544': 0.0,
   '0568': 0.0,
  '3000': 0.0,
  '7095': 0.0,
  '75609': 1.0,
  '56565': 2.0,
  '98656': 3.0,
  '756095': 0.0,
  '23432': 0.0},
  'fgrd': {'1987': 0.0,
  '0544': 0.0,
   '0568': 0.0,
  '3000': 0.0,
  '7095': 0.0,
  '75609': 1.0,
  '56565': 2.0,
  '98656': 3.0,
  '756095': 0.0,
  '23432': 0.0},
       
  'xyz':0.0, 
  
}

out = {}
for k,v in dct.items():
    if isinstance(v, dict):
        out[k] = {k2:v2 for k2,v2 in v.items() if v2==0}
    else:
        out[k] = v
print(out)

输出:

{'abcdef': {'1987': 0.0, '0544': 0.0, '0568': 0.0, '3000': 0.0, '7095': 0.0, '756095': 0.0, '23432': 0.0}, 
'fgrd': {'1987': 0.0, '0544': 0.0, '0568': 0.0, '3000': 0.0, '7095': 0.0, '756095': 0.0, '23432': 0.0}, 
'xyz': 0.0}

【讨论】:

    【解决方案2】:

    您必须遍历主字典,然后在辅助字典中查找值 这是一个例子:

    val = {'abcdef': {'1987': 0.0,
      '0544': 0.0,
       '0568': 0.0,
      '3000': 0.0,
      '7095': 0.0,
      '75609': 1.0,
      '56565': 2.0,
      '98656': 3.0,
      '756095': 0.0,
      '23432': 0.0}}
    
    for dict_k in val:
        for dicts in val.values():
            for k in dicts.copy():
                if dicts[k] != 0.0:
                    dicts.pop(k)
    print(val)
    

    【讨论】:

    • 外循环:for key, value in val.items():。内循环for i_key, i_value in reversed(value.items()):。如果您想从您正在迭代的序列中弹出项目,只需向后执行即可。
    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 2019-02-27
    • 2017-09-21
    • 2021-02-13
    相关资源
    最近更新 更多