python - 删除所有值为 N/A、- 或空字符串的键
问题描述
import json
def clean_data():
r = requests.get('https://coderbyte.com/api/challenges/json/json-cleaning')
return r.json()
print(clean_data())
示例输入
{"name":{"first":"Daniel","middle":"N/A","last":"Smith"},"age":45}
示例输出
{"name":{"first":"Daniel","last":"Smith"},"age":45}
解决方案
你可以递归地解决这个问题
import json
import requests
r = requests.get('https://coderbyte.com/api/challenges/json/json-cleaning')
data = r.json()
def clean_data(data):
if(isinstance(data, dict)):
to_be_deleted = []
for k in data:
if(isinstance(data[k], dict)):
new_val = clean_data(data[k])
data[k] = new_val
if(isinstance(data[k], list)):
new_val = clean_data(data[k])
data[k] = new_val
elif(isinstance(data[k], str)):
if(data[k] == 'N/A'):
to_be_deleted.append(k)
for i in to_be_deleted:
del data[i]
return data
if(isinstance(data, list)):
to_be_deleted = []
for i in range(len(data)):
if(isinstance(data[i], dict)):
new_val = clean_data(data[i])
data[i] = new_val
if(isinstance(data[i], list)):
new_val = clean_data(data[k])
data[i] = new_val
elif(isinstance(data[i], str)):
if(data[i] == 'N/A'):
to_be_deleted.append(i)
for i in to_be_deleted:
del data[i]
return data
clean_data(data)
data = data = {"name":{"first":"Daniel","middle":"N/A","last":"Smith", "haha": {'hihi':1, "hoho":"N/A"}},"age":45, "hehe":[1,2,3,4,"N/A"]}
clean_data(data)
# {'name': {'first': 'Daniel', 'last': 'Smith', 'haha': {'hihi': 1}}, 'age': 45, 'hehe': [1, 2, 3, 4]}
推荐阅读
- javascript - 使用 jquery 将单选按钮设置为从 api 响应中检查
- javascript - ng build --aot 的意外结果:错误在:意外指令'TooltipComponent in
- javascript - 返回两个日期之间的天数不起作用
- c++ - 模板静态函数模板类类型推导
- linux - Linux 物理驱动程序
- solr - EDISMAX - QF 字段的权重为 0
- php - 如何用变量替换动态类?
- javascript - 如何编辑一个 JS 填充的输入?
- java - 如何在 Google Play 测试/直播中为应用设置不同的端点?
- android - 通过 objectId Retrofit/Parse 获取用户