无法使用 del 函数删除 json 中的字典键。得到类型错误
Unable to delete a dictionary key inside a json by using the del function. getting a TypeError
此示例的代码已缩短,我正在遍历它,就好像它有多个键一样。
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]
但是请注意,这也不起作用。您不能在迭代时更改字典的大小。您可以通过调用 list
或类似的方法强制 .items()
完全消耗:
for name, contents in list(data["people"].items()):
if contents["parent"]["father"] == "x":
del data["people"][name]
最后,data
就是{'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)
此示例的代码已缩短,我正在遍历它,就好像它有多个键一样。
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]
但是请注意,这也不起作用。您不能在迭代时更改字典的大小。您可以通过调用 list
或类似的方法强制 .items()
完全消耗:
for name, contents in list(data["people"].items()):
if contents["parent"]["father"] == "x":
del data["people"][name]
最后,data
就是{'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)