我想在python中的字典键上添加多个值。该值再次是一个dict,其中某些参数发生了变化。
我写了下面的代码,但是似乎被覆盖了。有什么有效的方法吗?
from collections import defaultdict
node = 'node 1'
d = defaultdict(dict)
d[node] = {'interface':{'Eth1/48':'10.10.10.1'}} --> Here Eth1/48 is dynamically populated.
d[node] = {'interface':{'Eth1/47':'10.10.11.1'}} --> here Eth1/47 is again dynamically populated.
>>> d
defaultdict(<class 'dict'>, {'node 1': {'interface': {'Eth1/47': '10.10.11.1'}}})
我想要这样的输出:
{'node 1':{'interface': {'Eth1/48':'10.10.10.1'}
{'Eth1/47':'10.10.11.1'}
答案 0 :(得分:1)
使该命令不是命令,而是使键对应于其他命令列表的命令。
d = defaultdict(dict)
d[node] = {'interface': [{'Eth1/48':'10.10.10.1'}]
d[node]['interface'].append({'Eth1/47':'10.10.11.1'})
Dan在下面的评论非常棒。他指出,拥有可以对应同一密钥的IP而不是拥有Eth *:ip对的字典列表更有意义。
d = defaultdict(dict)
d[node] = {'interface': {'Eth1/47':['10.10.10.1']}
d[node]['interface']['Eth1/48'] = ['10.10.10.1']
现在您可以做
d[node]['interface']['Eth1/47'].append('new.ip.address.ballin')
d[node]['interface']['Eth1/48'].append('new.ip.address.ballin')
答案 1 :(得分:1)
这与您的输出不完全匹配,但是我建议您这样做(因为只有一个(键,值)对的命令没有那么有用)。
使用defaultdict(lambda: defaultdict(dict))
更深一层。
>>> from collections import defaultdict
>>>
>>> node = 'node 1'
>>> d = defaultdict(lambda: defaultdict(dict))
>>> d[node]['interface']['Eth1/48'] = '10.10.10.1'
>>> d[node]['interface']['Eth1/47'] = '10.10.11.1'
>>>
>>> d
defaultdict(<function __main__.<lambda>()>,
{'node 1': defaultdict(dict,
{'interface': {'Eth1/47': '10.10.11.1',
'Eth1/48': '10.10.10.1'}})})
答案 2 :(得分:0)
更改内部字典,而不是将新密钥添加到外部字典:
d = defaultdict(dict)
d[node] = {'interface':{'Eth1/48':'10.10.10.1'}}
d[node]['interface']['Eth1/47'] = '10.10.11.1'
如果您有新的值字典,也可以通过以下方式添加:
d[node]['interface'] = {**d[node]['interface'], **{'Eth1/47':'10.10.11.1'}} # joins current d[node]['interface'] and {'Eth1/47':'10.10.11.1'} into one dict