在嵌套字典中查找键
Finding key in a Nested dictionary
我正在尝试在嵌套字典中查找键:
mydict = {
('Geography', 1): {},
('Languages', 2): {
('English', 3): {
('Grammar', 6): {
('new', 10):{},
('old', 11): {}
}
},
('Spanish', 4): {},
('French', 5): {
('Grammar', 7): {}
},
('Dutch', 8): {
('Grammar', 9): {
('new', 12):{}
}
}
}
}
所以我在字典中循环查找键 ('Grammar', 9)
例如:
def _loop(topic, topics_dict):
if (topic[0], topic[1]) in topics_dict.keys():
return topics_dict[(topic[0], topic[1])]
else:
for k, v in topics_dict.items():
if v != {}:
return _loop(topic, v)
topic = ('Grammar', 9)
trim_mydict = _loop(topic, mydict)
print(trim_mydict)
但是,事实上,它returns None
而不是 {('new', 12):{}}
我已经检查了这个线程 (Finding a key recursively in a dictionary),但我似乎在做同样的事情...
当你 return 在循环中没有条件时,它只有 return 是第一个结果,即使它是 None。我添加了这样的支票:
mydict = {
('Geography', 1): {},
('Languages', 2): {
('English', 3): {
('Grammar', 6): {
('new', 10):{},
('old', 11): {}
}
},
('Spanish', 4): {},
('French', 5): {
('Grammar', 7): {}
},
('Dutch', 8): {
('Grammar', 9): {
('new', 10):{}
}
}
}
}
def _loop(topic, topics_dict):
if (topic[0], topic[1]) in topics_dict.keys():
return topics_dict[(topic[0], topic[1])]
else:
for k, v in topics_dict.items():
if v != {}:
if (result := _loop(topic, v)) is not None:
return result
topic = ('Grammar', 9)
trim_mydict = _loop(topic, mydict)
print(trim_mydict)
>>> {('new', 10): {}}
我正在尝试在嵌套字典中查找键:
mydict = {
('Geography', 1): {},
('Languages', 2): {
('English', 3): {
('Grammar', 6): {
('new', 10):{},
('old', 11): {}
}
},
('Spanish', 4): {},
('French', 5): {
('Grammar', 7): {}
},
('Dutch', 8): {
('Grammar', 9): {
('new', 12):{}
}
}
}
}
所以我在字典中循环查找键 ('Grammar', 9)
例如:
def _loop(topic, topics_dict):
if (topic[0], topic[1]) in topics_dict.keys():
return topics_dict[(topic[0], topic[1])]
else:
for k, v in topics_dict.items():
if v != {}:
return _loop(topic, v)
topic = ('Grammar', 9)
trim_mydict = _loop(topic, mydict)
print(trim_mydict)
但是,事实上,它returns None
而不是 {('new', 12):{}}
我已经检查了这个线程 (Finding a key recursively in a dictionary),但我似乎在做同样的事情...
当你 return 在循环中没有条件时,它只有 return 是第一个结果,即使它是 None。我添加了这样的支票:
mydict = {
('Geography', 1): {},
('Languages', 2): {
('English', 3): {
('Grammar', 6): {
('new', 10):{},
('old', 11): {}
}
},
('Spanish', 4): {},
('French', 5): {
('Grammar', 7): {}
},
('Dutch', 8): {
('Grammar', 9): {
('new', 10):{}
}
}
}
}
def _loop(topic, topics_dict):
if (topic[0], topic[1]) in topics_dict.keys():
return topics_dict[(topic[0], topic[1])]
else:
for k, v in topics_dict.items():
if v != {}:
if (result := _loop(topic, v)) is not None:
return result
topic = ('Grammar', 9)
trim_mydict = _loop(topic, mydict)
print(trim_mydict)
>>> {('new', 10): {}}