我可以在字典创建时引用字典值吗?

时间:2018-07-16 10:50:52

标签: python python-3.x dictionary

我有这本字典,我想用前者声明的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::",
    }
}

1 个答案:

答案 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::",
    }
}