[英]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
键。 假设如果父键不存在,我想像字典菜单的直接键一样添加到主字典
我怎样才能做到这一点
看两个例子:
{"green_veg": "bad"}
父级为vegetarian
,父级存在于名为menu
的字典中。{"green_veg": "bad"}
带有父级greens
,其中父级不存在于名为menu
的字典中。这是代码:
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.