我正在尝试从列表字典中过滤出讨厌的 无 值。这是一个示例字典:
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']}
我认为这个词典理解会起作用,但如果在列表中的任何地方找到 无 ,它会删除整个键。
filtered = {x:y for x,y in parsed_data.items() if len(y)>0 and None not in y}
我也尝试用嵌套列表理解进行字典理解,但看起来很疯狂,只是通过观察它就可以通过大脑融化。
答案 0 :(得分:2)
你需要迭代过滤Nones的列表中的元素并保留其他所有内容,如果你想更改原始版本只更新每个列表:
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)
答案 1 :(得分:2)
您可以使用以下dict
理解,然后将其分配回parsed_data
parsed_data = {key: [i for i in value if i] for key, value in parsed_data.items()}
输出
{'DATA2': [],
'DATA3': [],
'DATA1': ['0.17998362', '0.06388072', '0.02091766', '0.00602364', '0.03171121', '1.39579976', '0.16731957', '0.21564664', '0.03516583'],
'DATA4': ['0.18406565', '0.06776296', '0.14278403', '0.11962064', '0.00998447']}
答案 2 :(得分:0)
您可以创建一个新的dic,将每个键的值设置为空列表,然后在每个列表中附加值!=无
new_arsed_data={}
for key,value in arsed_data.items():
new_arsed_data.setdefault(key,[])
for item in value:
if item!=None:
new_arsed_data[key].append(item)
与其他人相比,这是一个更复杂/更少pythonic的答案,但对于那些(像我这样)是python新手的人来说可能更容易理解:)