Python 过滤嵌套的dict

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

我有一个如下所示的Python脚本,我很难弄清楚如何过滤字典中的字典。我希望这样做,如果有对象属性
'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]
Note
data[language]
而不仅仅是
语言
我认为它可以工作,但我得到了
运行时错误:字典在迭代过程中改变了大小