繁体   English   中英

如果键存在,则添加嵌套字典的值

[英]add value of nested dictionary if key exists

我有一个代码。 我只从堆栈溢出中获取它

下面是代码

def does_nested_key_exists(dictionary, nested_key, keys=None):
    if keys is None:
        keys = []

    for key, value in dictionary.items():
        if key == nested_key:
            return True, '.'.join(keys)
        if isinstance(value, dict):
            keys.append(key)
            return does_nested_key_exists(value, nested_key, keys)
    return False, ""

menu = {'dinner':
            {'chicken':'good',
             'beef':'average',
             'vegetarian':{
                   'tofu':'good',
                   'salad':{
                            'caeser':'bad',
                            'italian':'average'}
                   },
             'pork':'bad'}
        }

我需要的是,如果假设一个新键假设green_veg的父键为vegetarian (实际上存在),我需要在同一父键vegetarian下添加green_veg键。 假设如果父键不存在,我想像字典菜单的直接键一样添加到主字典

我怎样才能做到这一点

看两个例子:

  1. {"green_veg": "bad"}父级为vegetarian ,父级存在于名为menu的字典中。
  2. {"green_veg": "bad"}带有父级greens ,其中父级不存在于名为menu的字典中。
  3. 还给出了过程示例。

这是代码:

class Solution:
    def __init__(self) -> None:
        self.parents = []

    def fun(self, dikt: dict, find_key, new_key):
        if find_key in dikt:
            dikt[find_key][new_key] = {}
            return True
        f = False
        for key, value in dikt.items():
            if isinstance(value, dict):
                f = f or self.fun(value, find_key, new_key)
        return f

    def call(self, dikt: dict, find_key, new_key):
        p = self.fun(dikt, find_key, new_key)
        if not p:
            dikt[new_key] = {}

示例 1(来自问题)

menu = {
    "dinner": {
        "chicken": "good",
        "beef": "average",
        "vegetarian": {
            "tofu": "good",
            "salad": {"caeser": "bad", "italian": "average"},
        },
        "pork": "bad",
    }
}
print(menu)
Solution().call(menu, "vegetarian", "green_veg")
print(menu)
Solution().call(menu, "greens", "green_veg")
print(menu)

这是 output:

{'dinner': {'chicken': 'good', 'beef': 'average', 'vegetarian': {'tofu': 'good', 'salad': {'caeser': 'bad', 'italian': 'average'}}, 'pork': 'bad'}}
{'dinner': {'chicken': 'good', 'beef': 'average', 'vegetarian': {'tofu': 'good', 'salad': {'caeser': 'bad', 'italian': 'average'}, 'green_veg': {}}, 'pork': 'bad'}}
{'dinner': {'chicken': 'good', 'beef': 'average', 'vegetarian': {'tofu': 'good', 'salad': {'caeser': 'bad', 'italian': 'average'}, 'green_veg': {}}, 'pork': 'bad'}, 'green_veg': {}}

示例 2(来自评论)

menu = {}
print(menu)
Solution().call(menu, "None", "p1")
Solution().call(menu, "p1", "p2")
Solution().call(menu, "p2", "p3")
print(menu)

这是 output:

{}
{'p1': {'p2': {'p3': {}}}}
menu = {
    "dinner": {
        "chicken": "good",
        "beef": "average",
        "vegetarian": {
            "tofu": "good",
            "salad": {"caeser": "bad", "italian": "average"},
        },
        "pork": "bad",
    }
}

def menuItems(dict,type,target,keys):
    if(target in dict[type].keys()):
        dict[type][target][keys[0]]=keys[1]
    else:
        dict[type][keys[0]]=keys[1]

menuItems(menu,'dinner','vegitarian',['green_veg','bad'])
print(menu)

output:

{'dinner': {'chicken': 'good', 'beef': 'average', 'vegetarian': {'tofu': 'good', 'salad': {'caeser': 'bad', 'italian': 'average'}}, 'pork': 'bad', 'green_veg': 'bad'}}

理论:

  ->check weather the key exist or not in parent
  ->if exist create a new key with value in that key
  ->else create a key in parent which is type in above code 

python中的字典的基本概念,我想可能会帮助你理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM