我正在尝试从列表字典中过滤掉讨厌的None值。这是一个示例字典:
parsed_data = {'DATA1': [None, None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, '0.17998362', '0.06388072',
'0.02091766', None, '0.00602364', '0.03171121', None, '1.39579976', '0.16731957',
'0.21564664', '0.03516583'], 'DATA2': [None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None, None, None], 'DATA3':
[None, None, None, None], 'DATA4': ['0.18406565', '0.06776296', '0.14278403',
'0.11962064', '0.00998447']}
我以为这个字典理解会起作用,但是如果在列表中的任何位置都找不到None,它将删除整个键。
filtered = {x:y for x,y in parsed_data.items() if len(y)>0 and None not in y}
我还尝试了使用嵌套列表理解来进行字典理解,但是它看上去很疯狂,只是看着它就被大脑融化了一点。
您需要遍历列表中的元素以过滤无内容并保留所有其他内容,如果要更改原始内容,只需更新每个列表即可:
for v in parsed_data.values():
v[:] = (ele for ele in v if ele is not None)
或者,如果您想要一个新的字典:
new = {k : [ele for ele in v if ele is not None] for k,v in parsed_data.items()}
两者都会给你:
{'DATA1': ['0.17998362',
'0.06388072',
'0.02091766',
'0.00602364',
'0.03171121',
'1.39579976',
'0.16731957',
'0.21564664',
'0.03516583'],
'DATA2': [],
'DATA3': [],
'DATA4': ['0.18406565',
'0.06776296',
'0.14278403',
'0.11962064',
'0.00998447']}
如果您使用的是python 3,则可以将None组合过滤器用于第一个逻辑。ne:
for v in parsed_data.values():
v[:] = filter(None.__ne__, v)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句