2017-08-04 237 views
-4
{'140508921-1183337': {'COVERAGE_PILLAR': nan, 
    'HARDWARE_PILLAR': nan, 
    'SECURITY_PILLAR': nan, 
    'SOFTWARE_PILLAR': nan}, 
'PSS_13240-1451364': {'COVERAGE_PILLAR': 10.0, 
    'HARDWARE_PILLAR': 25.0, 
    'SECURITY_PILLAR': 55.0, 
    'SOFTWARE_PILLAR': 10.0} 
} 

想要删除具有nan值的键。如 “140508921-1183337''should作为其钥匙被移除/值对空Python嵌套字典

回答

0

如果a是字典做到这一点:

a={'140508921-1183337': {'COVERAGE_PILLAR': 'nan', 'HARDWARE_PILLAR': 'nan', 'SECURITY_PILLAR':'nan', 'SOFTWARE_PILLAR': 'nan'}, 'PSS_13240-1451364': {'COVERAGE_PILLAR': 10.0, 'HARDWARE_PILLAR': 25.0, 'SECURITY_PILLAR': 55.0, 'SOFTWARE_PILLAR': 10.0}} 


def remove_keys_with_nan(item): 
    if not hasattr(item, 'items'): 
     return item 
    else: 
     d = {key: remove_keys_with_nan(value) for key, value in item.iteritems() if value is not 'nan'} 
     return dict((k, v) for k, v in d.iteritems() if v) 

a = remove_keys_with_nan(a) 

print(a) 

结果:

{'PSS_13240-1451364': {'COVERAGE_PILLAR': 10.0, 'HARDWARE_PILLAR': 25.0, 'SOFTWARE_PILLAR': 10.0, 'SECURITY_PILLAR': 55.0}} 

编辑 - 新问题的新答案

使用:

import numpy as np 

nan = np.nan 

a={'140508921-1183337': {'COVERAGE_PILLAR': nan, 'HARDWARE_PILLAR': nan, 'SECURITY_PILLAR': nan, 'SOFTWARE_PILLAR': nan}, 'PSS_13240-1451364': {'COVERAGE_PILLAR': 10.0, 'HARDWARE_PILLAR': 25.0, 'SECURITY_PILLAR': 55.0, 'SOFTWARE_PILLAR': 10.0}} 

然后与以前相同的代码。

+0

需要删除'''140508921-1183337':{}'这也来自字典。 –

+0

@SoravVerma哦。对。让我在几分钟内编辑我的答案 – sera

+0

@SoravVerma完成!!!!!!! – sera