python - 从具有“nan”值的字典中删除键
问题描述
我有源字典,请参考下面的示例。它具有深层嵌套的子字典和列表,我需要删除值为“nan”的所有键。
data = {"col1":"val1","col2":"val2","col3":"val3","col4":"val3","list1":[{"l1":"v1","l2":"nan"},{"K1":"Kv1","K2":"nan"},{"M1":"Mv1","M2":"nan","sublist1":[{"SL1":"SV1","SL2":"nan"}]}],"list2":[{"l1":"v1","l2":"nan"},{"K1":"Kv1","K2":"nan"},{"M1":"Mv1","M2":"nan","sublist2":[{"SL1":"SV1","SL2":"nan"}]}]}
我通过创建一个函数尝试了以下代码,但它没有按预期工作:
def cleanNullTerms(d):
clean = {}
for k, v in d.items():
if isinstance(v, list):
for values in v:
nested = cleanNullTerms(values)
if values =='nan':
clean[k] = nested
elif v is not 'nan':
clean[k] = v
return clean
解决方案
您的代码将列表的值放在列表所在的位置。如果有很多值,每个值都会覆盖最后一个,所以只有最后一个被保存。它并没有被卷入字典。如果它们与字典和列表嵌套,它仍然只删除“nan”。例如,它不进入集合。如果你想让它进入集合,写评论,我可以添加这个。
def cleanNullTerms(d):
clean={}
for k, v in d.items():
if isinstance(v, list):
v2=[]
for value0 in v:
nested=cleanNullTerms(value0)
if value0!='nan':
v2.append(nested)
clean[k]=v2
elif isinstance(v, dict):
clean[k]=cleanNullTerms(v)
elif v!='nan':
clean[k]=v
return clean
推荐阅读
- reporting-services - 如何在 RDLC 报告中制作两列并在右列添加页脚?
- python - 尝试下载完整的 HTML 页面
- c# - 无论如何要读取 Naduio 流而不是将其写入文件然后再次读取
- python - 从 Azure Function Python 运行时运行 ssh-keygen
- javascript - 如果其他问题...为什么控制台没有打印字符串“错误”而是打印了“Randommm”?
- powershell - PowerShell 将每个 zip 文件解压缩到自己的文件夹
- javascript - jQuery unblockUI() 由 ajax 重定向触发
- javascript - 如何使用 Lodash 计算嵌套数组中的值?
- java - 如何将图像添加到 Textview
- java - Selenium:error:package com.thoughtworks.selenium.webdriven 不存在