Вы пытаетесь использовать 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': {}}
, что, как я считаю, то, что вы хотите.