Python 过滤嵌套的dict
我有一个如下所示的Python脚本,我很难弄清楚如何过滤字典中的字典。我希望这样做,如果有对象属性Python 过滤嵌套的dict,python,json,Python,Json,我有一个如下所示的Python脚本,我很难弄清楚如何过滤字典中的字典。我希望这样做,如果有对象属性'type':'data',那么对象本身将被删除。如果有帮助的话,我正在尝试从中筛选出languages.yml 导入json file=open('languages.json','r') data=json.load(文件) 打印(数据) 对于数据中的语言: 如果数据[语言][“类型”]=“数据”: 德尔语言 file.close()文件 打印(数据) file2=open('langs.jso
'type':'data'
,那么对象本身将被删除。如果有帮助的话,我正在尝试从中筛选出languages.yml
导入json
file=open('languages.json','r')
data=json.load(文件)
打印(数据)
对于数据中的语言:
如果数据[语言][“类型”]=“数据”:
德尔语言
file.close()文件
打印(数据)
file2=open('langs.json','w')
file2.write(json.dumps(数据))
file2.close()
打印(“完成”)
您的代码有两个问题
第一个是del language
是键值,但不是字典中对它的引用。因此,您需要将其更改为deldata[language]
,以实际删除字典中的键和值
第二个是根据字典的大小进行循环。通过对data.keys()中的language执行,将数据中的language更改为,
,以循环遍历键,这将处理字典大小调整的问题
最终代码:
for language in data.keys():
if data[language]['type'] == 'data':
del data[language]
也作为另一个优化。您可以在将内容分配给数据后关闭该文件,因为您不再使用它。老实说,这只会在文件内容相当大时产生影响,因为它会释放内存以供使用。在if中,您是否尝试过del data[language]
Notedata[language]
而不仅仅是语言
我认为它可以工作,但我得到了运行时错误:字典在迭代过程中改变了大小