कुंजी के आधार पर नेस्टेड डिक में एक विशिष्ट उप-भाग प्राप्त करें
Dec 19 2020
मेरे पास एक नेस्टेड शब्दकोश है। और मैं एक निश्चित गुण के आधार पर एक उप शब्दकोश निकालना चाहूंगा: यहाँ मेरे शब्दकोश का एक सरल संस्करण है:
subdata = {
"id": 997,
"acronym": "root",
"color_hex_triplet": "FFFFFF",
"children": [
{
"id": 8,
"acronym": "grey",
"color_hex_triplet": "BFDAE3",
"children": [
{
"id": 567,
"acronym": "CH",
"color_hex_triplet": "B0F0FF",
"children": [
{
"id": 688,
"acronym": "CTX",
"color_hex_triplet": "B0FFB8",
"children": [
{
"id": 695,
"acronym": "CTXpl",
"color_hex_triplet": "70FF70",
"children": [
{
"id": 315,
"acronym": "Isocortex",
"color_hex_triplet": "70FF71",
"children": [
{
"id": 184,
"acronym": "FRP",
"color_hex_triplet": "268F45",
"children": [
{
"id": 68,
"acronym": "FRP1",
"color_hex_triplet": "268F45",
"children": []
},
{
"id": 69,
"acronym": "FRP2",
"color_hex_triplet": "268F45",
"children": []
}]}]}]}]}]]}]}]}
और उदाहरण के आधार पर "संक्षिप्त": "एफआरपी" मैं उस निश्चित शब्दकोश और उसके सभी बच्चों को इस तरह प्राप्त करना चाहता हूं:
region_dict = {
"id": 184,
"acronym": "FRP",
"color_hex_triplet": "268F45",
"children": [
{
"id": 68,
"acronym": "FRP1",
"color_hex_triplet": "268F45",
"children": []},
{"id": 69,
"acronym": "FRP2",
"color_hex_triplet": "268F45",
"children": []
}]}
मैंने निम्नलिखित कोड (Aplet123 के सुझाव से) की कोशिश की, लेकिन यह शब्दकोश को वापस नहीं करता है। यह केवल सच लौटाता है। क्या मुझसे कुछ गलत हो रही है?
def get_parent_dict(dic, reg):
if dic['acronym'] == reg:
return dic
for child in dic["children"]:
result = get_parent_dict(child, reg) is not None
if result is not None:
return result
return None # not technically needed
f = open(json_path)
data = json.load(f)
subdata = data['msg'][0] #this is a nested dictionary
region_dict = get_parent_dict(subdata, "FRP")
जवाब
1 Aplet123 Dec 19 2020 at 05:24
आप पहली खोज में गहराई का उपयोग कर सकते हैं:
def dfs_for_id(dic, id):
if dic["id"] == id:
return dic
for child in dic["children"]:
result = dfs_for_id(child, id)
if result is not None:
return result
return None # not technically needed