我有这本字典,我想用前者声明的netdev["ipv6"]["addr"]
设置netdev["ipv6"]["prefix"]
的值。
是否有任何简便的方法可以“即时”执行此操作,还是必须在dict声明之外使用dict.update()
等已知机制执行此操作?...
net_dev = {
"link_name": "eth0",
"ipv4": {
"address": "10.80.0.1",
"mask": "255.255.255.0",
},
"ipv6": {
"prefix": "2001:db8:0:1::",
"addr": <HERE_THE_PREFIX_IS_USED> + "1234:1",
"mask": "64",
"prefix_range": "2001:db8:0:100::",
}
}
答案 0 :(得分:2)
是和否!您可以使用f-strings
(在Python-3.6 +中可用)根据已经可用的变量(在这种情况下可以为netdev["ipv6"]["prefix"]
)自动格式化字符串。如果您在创建字典之前不知道netdev["ipv6"]["prefix"]
的值,则将无法进行操作(至少在Cpyhon实现中或一般在Python级别)。但是,可能会有一些技巧可以创建自定义词典,该词典可以重新格式化预期键的值,如下所述:Can you set a dictionary value dependant on another dictionary entry?。
PREFIX = previously_defined_prefix
net_dev = {
"link_name": "eth0",
"ipv4": {
"address": "10.80.0.1",
"mask": "255.255.255.0",
},
"ipv6": {
"prefix": PREFIX,
"addr": f"{PREFIX}1234:1",
"mask": "64",
"prefix_range": "2001:db8:0:100::",
}
}
在这种情况下,PREFIX
是在与net_dev
字典相同的名称空间中定义的变量。
在使用3.6版本而不是f字符串的方法中,您可以简单地使用str.format()
或仅使用+运算符:
PREFIX = previously_defined_prefix
net_dev = {
"link_name": "eth0",
"ipv4": {
"address": "10.80.0.1",
"mask": "255.255.255.0",
},
"ipv6": {
"prefix": PREFIX,
"addr": "{}1234:1".format(PREFIX), # PREFIX + "1234:1"
"mask": "64",
"prefix_range": "2001:db8:0:100::",
}
}