无法使用del函数删除json中的字典键。得到一个TypeError

时间:2019-02-13 01:33:32

标签: python json dictionary del

此示例的代码缩短,我正在遍历它,就好像它具有多个键一样。

string = '''
{
    "people":
    {
        "a":
        {
            "parent":
            {
                "father": "x"
            }
        }
    }
}
'''

data = json.loads(string)

我确保我的条件在工作,它输出“ 确定”,所以很好。

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]

我在做什么错了?

谢谢

2 个答案:

答案 0 :(得分:1)

您正在尝试使用name作为键,但是name实际上是字典,而不是字符串。使用.items()来获取名称和内容:

for name, contents in data["people"].items():
    if contents["parent"]["father"] == "x":
        del data["people"][name]

但是,请注意,这也不起作用。迭代时不能更改字典的大小。您可以通过调用.items()或类似方法来强制list完全消耗:

for name, contents in list(data["people"].items()):
    if contents["parent"]["father"] == "x":
        del data["people"][name]

最后,data就是{'people': {}},我相信这就是您想要的。

答案 1 :(得分:1)

尝试一下:

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)