有没有一种方法可以在不改变包含的可变类型的情况下更新字典?

2024-09-26 22:52:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本关于这种结构的设置的字典:

main_dict = {
    'a': {
        'a1': 1,
        'a2': 2,
    },
    'b': {
        'bb': {
            'bb1' : 1,
            'bb2' : 2,
        },
    },
}

然后我有一些类保存对main_dict中包含的字典的引用,例如:

^{pr2}$

所以我可以更新main_dict中的不可变值,这些更新将反映在my_b中,因为my_b.settings is main_dict['b']。在

不过,我现在有了新的根目录设置:

new_dict = {
    'a': {
        'a1': 11,
        'a2': 22,
    },
    'b': {
        'bb': {
            'bb1' : 11,
            'bb2' : 22,
        },
    },
}

有没有一种简单而通用的方法可以将new_dict中的所有不可变值复制到main_dict中,这样my斨b中的引用保持不变?在


Tags: a2new字典settingsismainmya1
1条回答
网友
1楼 · 发布于 2024-09-26 22:52:58

这有帮助吗?在

#!/usr/bin/env python3

def copyimmut(fromdict, todict):
    for key in fromdict:
        if type(fromdict[key]) is dict and key in todict:
            copyimmut(fromdict[key], todict[key])
        else:
            todict[key] = fromdict[key]

main_dict = {
    'a': {'a1': 1, 'a2': 2},
    'b': {'bb': {'bb1' : 1,'bb2' : 2, }}}

my_b = main_dict['b']
assert(my_b is main_dict['b'])
print(my_b)

new_dict = {
    'a': {'a1': 11, 'a2': 22},
    'b': {'bb': {'bb1' : 11, 'bb2' : 22, }},
    'c': {'cc': {'cc1' : 11, 'cc2' : 22, }}}

copyimmut(new_dict, main_dict)
assert(my_b is main_dict['b'])
print(my_b)
print(main_dict['c'])

收益率

^{pr2}$

相关问题 更多 >

    热门问题