三级字典python显然不起作用

2024-04-26 13:36:55 发布

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

>>> servers = ["srv1.usa", "srv1.lnd"]
>>> proxies = ["proxy1.usa", "proxy1.lnd"]
>>> proxy_map = {}.fromkeys(servers, {}.fromkeys(proxies, {}))
>>> print proxy_map
{'srv1.lnd': {'proxy1.lnd': {}, 'proxy1.usa': {}}, 'srv1.usa': {'proxy1.lnd': {}, 'proxy1.usa': {}}}
>>> proxy_map["srv1.lnd"]["proxy1.lnd"] = {"hosts": "host1.usa"}
>>> print proxy_map
{'srv1.lnd': {'proxy1.lnd': {'hosts': 'host1.usa'}, 'proxy1.usa': {}}, 'srv1.usa': {'proxy1.lnd': {'hosts': 'host1.usa'}, 'proxy1.usa': {}}}

这就是我的问题,为什么python更改了两个字典而不是我更改的一个?抱歉,如果这个问题很愚蠢,但我并没有找到我的问题的答案。谢谢您!你知道吗


Tags: 答案map字典proxyprintlndhostsservers
2条回答

解决方法是使用字典理解:

而不是proxy_map = {}.fromkeys(servers, {}.fromkeys(proxies, {}))

使用

proxy_map = {server : {proxy: {} for proxy in proxies} for server in servers}

完整示例:

>>> servers = ["srv1.usa", "srv1.lnd"]
>>> proxies = ["proxy1.usa", "proxy1.lnd"]
>>> proxy_map = {server : {proxy: {} for proxy in proxies} for server in servers}
>>> proxy_map
{'srv1.usa': {'proxy1.usa': {}, 'proxy1.lnd': {}}, 'srv1.lnd': {'proxy1.usa': {}, 'proxy1.lnd': {}}}
>>> proxy_map["srv1.lnd"]["proxy1.lnd"] = {"hosts": "host1.usa"}
>>> proxy_map
{'srv1.usa': {'proxy1.usa': {}, 'proxy1.lnd': {}}, 'srv1.lnd': {'proxy1.usa': {}, 'proxy1.lnd': {'hosts': 'host1.usa'}}}

fromkeys是一个陷阱。别用它。你知道吗

使用dict.fromkeys时,结果dict的所有值都是相同的对象。不仅仅是相等的物体-它们是同一个物体。如果你做d = dict.fromkeys(keys, val),你对d[key1]做的任何事都可以通过d[key2]看到,因为d[key1]d[key2]是同一件事。你知道吗

dict.fromkeys通常仅在值不可变时才有用。剩下的时间,您应该使用dict理解来重新评估每个键的值表达式。例如

{key: {} for key in keys}

而不是dict.fromkeys(keys, {})。你知道吗

相关问题 更多 >