我正在寻找一种使用config.setdefault()
方法处理多级字典的简单方法。下面是一个例子:
config = {}
config.setdefault("key1", 10)
config.setdefault("key2", {'x': 1, 'y': 2})
config.setdefault("key3", 5)
对于"key2"
,我想为'x'
和'y'
键设置默认值。这可能吗?如果我需要澄清我的问题,请告诉我。
.setdefault()
不是这样工作的。它接受单个值参数。
可以使用.update(new_dict)
来合并新的键/值对。但如果它列出了任何已存在的密钥,现有的值将被覆盖。所以这不是完全正确的。
您正在寻找"合并字典"。我们构造了一个新的字典,并给出了旧的config
覆盖任何新建议值的机会。注意,c
保留了原来的值。
>>> config = dict(c=1)
>>> config = {**{'x': 2, 'y': 3, 'c': 4}, **config}
>>> config
{'x': 2, 'y': 3, 'c': 1}
如果你有字典a
和b
,
{**a, **b}
将合并它们。
我要在这里回答我自己的问题,这是一个比我想象的更简单的解决方案。下面的代码完成了我想要的。
config = {}
config.setdefault("key1", 10)
config.setdefault("key2", {}).setdefault('x', 1)
config.setdefault("key2", {}).setdefault('y', 2)
config.setdefault("key3", 5)
print(config)
{'key1': 10, 'key2': {'x': 1, 'y': 2}, 'key3': 5}