Python 无法使用del函数删除json中的字典键。得到一个打字错误
代码缩短对于这个例子,我正在迭代它,就好像它有多个键一样Python 无法使用del函数删除json中的字典键。得到一个打字错误,python,json,dictionary,del,Python,Json,Dictionary,Del,代码缩短对于这个例子,我正在迭代它,就好像它有多个键一样 string = ''' { "people": { "a": { "parent": { "father": "x" } } } } ''' data = json.loads(string) 我确保我的条件有效,它输出“ok”,所以它很好 for name
string = '''
{
"people":
{
"a":
{
"parent":
{
"father": "x"
}
}
}
}
'''
data = json.loads(string)
我确保我的条件有效,它输出“ok”,所以它很好
for name in data["people"].values():
if name["parent"]["father"] == "x":
print("ok")
然后我修改上面的代码以删除该键,并得到以下错误:
TypeError:不可损坏的类型:“dict”
for name in data["people"].values():
if name["parent"]["father"] == "x":
del data["people"][name]
我做错了什么
谢谢您试图使用
name
作为键,但name
实际上是一本词典,而不是字符串。使用.items()
获取名称和内容:
for name, contents in data["people"].items():
if contents["parent"]["father"] == "x":
del data["people"][name]
但是,请注意,这也不起作用。不能在迭代字典时更改其大小。您可以通过调用列表
或其上的类似功能,强制.items()
完全消费:
for name, contents in list(data["people"].items()):
if contents["parent"]["father"] == "x":
del data["people"][name]
最后,数据
将只是{'people':{}}
,我相信这就是你想要的。试试这个:
import json
string = '''
{
"people":
{
"a":
{
"parent":
{
"father": "x"
}
}
}
}
'''
data = json.loads(string)
l = []
for key, values in data["people"].items():
if values["parent"]["father"] == "x":
l.append(key)
for x in l:
data["people"].pop(x)
print(data)
我很高兴我能帮上忙非常感谢,我花了一段时间才明白为什么列表方法是有效的(我太笨了),然后我终于明白了!但老实说,我仍然无法理解items()和values()之间的区别,是时候做一些谷歌搜索了:)@Jsh0s实际上很简单。有三个主要的字典迭代函数:
键
,值
,和项
<代码>键迭代键,值
迭代值,项
迭代元组,第一个元素是键,第二个元素是对应的值。