假设您有一个嵌套的字典,如下所示:
{
"text": "hi",
"next": {
"text": "hi",
"next": {
"text": "hi",
}
}
}
现在我想把最后一个节点改为{"text": "bye"}
,这样我的最终结果如下:
{
"text": "hi",
"next": {
"text": "hi",
"next": {
"text": "bye",
}
}
}
请记住,可能有数千个节点,但我只想修改最后一个节点。我该怎么做呢?
遍历字典,获取最后一个对象并更改它
d = {
"text":"hi",
"next":{
"text":"hi",
"next":{
"text":"bye"
}
}
}
pre = d
while True:
next_ = pre.get('next')
if not next_:
pre['text'] = 'bye'
break
pre = next_
print(d)
如果您知道字典的深度,您可以使用reduce
,如下所示:
from functools import reduce
def reduce_dict(data, items):
return reduce(dict.get, items, data)
depth = 1000
reduce_dict(my_dict, ['next']* depth)['text'] = 'bye'
root = {'text': 'hi', 'next': {'text': 'hi', 'next': {'text': 'hi'}}}
node = root
while 'next' in node:
node = node['next']
node['text'] = 'bye'
print(root)
输出:
{'text': 'hi', 'next': {'text': 'hi', 'next': {'text': 'bye'}}}