>>> 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更改了两个字典而不是我更改的一个?抱歉,如果这个问题很愚蠢,但我并没有找到我的问题的答案。谢谢您!你知道吗
解决方法是使用字典理解:
而不是
proxy_map = {}.fromkeys(servers, {}.fromkeys(proxies, {}))
使用
proxy_map = {server : {proxy: {} for proxy in proxies} for server in servers}
完整示例:
fromkeys
是一个陷阱。别用它。你知道吗使用
dict.fromkeys
时,结果dict的所有值都是相同的对象。不仅仅是相等的物体-它们是同一个物体。如果你做d = dict.fromkeys(keys, val)
,你对d[key1]
做的任何事都可以通过d[key2]
看到,因为d[key1]
和d[key2]
是同一件事。你知道吗dict.fromkeys
通常仅在值不可变时才有用。剩下的时间,您应该使用dict理解来重新评估每个键的值表达式。例如而不是
dict.fromkeys(keys, {})
。你知道吗相关问题 更多 >
编程相关推荐