Python将一个字典复制为键值的有效方法
我正在用python开发一个监视工具。 它有一个全局字典,所有主机作为键,其详细信息作为值 目前我是这样做的:Python将一个字典复制为键值的有效方法,python,dictionary,Python,Dictionary,我正在用python开发一个监视工具。 它有一个全局字典,所有主机作为键,其详细信息作为值 目前我是这样做的: host = hostname hostDictionary["a"] = a hostDictionary["b"] = b hostDictionary["c"] = c globalDictionary[host] = hostDictionary globalDictionary[host] = dict(hostDictionary.items()) 我的问题是: 这是将
host = hostname
hostDictionary["a"] = a
hostDictionary["b"] = b
hostDictionary["c"] = c
globalDictionary[host] = hostDictionary
globalDictionary[host] = dict(hostDictionary.items())
我的问题是:
globalDictionary[host]["a"] = a
globalDictionary[host]["b"] = b
globalDictionary[host]["c"] = c
1\2-它是一个参考,您需要以这种方式复制
from copy import copy
globalDictionary[host] = copy(hostDictionary)
3-我不这么认为,我认为复制到所有对象可能比访问每个元素更快。1\2-这是一个参考,您需要以这种方式进行复制
from copy import copy
globalDictionary[host] = copy(hostDictionary)
3-我不这么认为,我认为复制到所有对象可能比访问每个元素更快
host = 'hostname'
hostDictionary = {}
globalDictionary = {}
hostDictionary["a"] = a
hostDictionary["b"] = b
hostDictionary["c"] = c
globalDictionary[host] = hostDictionary`
检查它-
globalDictionary[host] is hostDictionary
输出-
True
这意味着两者都有相同的idcopy()
或deepcopy()
这会给你一个False
,并证明它被复制了host = 'hostname'
hostDictionary = {}
globalDictionary = {}
hostDictionary["a"] = a
hostDictionary["b"] = b
hostDictionary["c"] = c
globalDictionary[host] = hostDictionary`
检查它-
globalDictionary[host] is hostDictionary
输出-
True
这意味着两者都有相同的idcopy()
或deepcopy()
这会给你一个False
,并证明它被复制了我从Python CLI获得了以下信息:
>>> a = {}
>>> b = {}
>>> c = {}
>>> a["foo"] = 1
>>> b = a
>>> c = a.copy()
>>> b["bar"] = 2
>>> a
{'foo': 1, 'bar': 2}
>>> b
{'foo': 1, 'bar': 2}
>>> c
{'foo': 1}
这意味着:
globalDictionary
的键中引用了hostDictionary
。如果您想要副本,请像hashcode55所说的那样调用hostDictionary.copy()
或hostDictionary.deepcopy()
hostDictionary={'a':a,'b':b,'c':c}
globalDictionary[host]
引用的每个操作的对象我从Python CLI获得了以下信息:
>>> a = {}
>>> b = {}
>>> c = {}
>>> a["foo"] = 1
>>> b = a
>>> c = a.copy()
>>> b["bar"] = 2
>>> a
{'foo': 1, 'bar': 2}
>>> b
{'foo': 1, 'bar': 2}
>>> c
{'foo': 1}
这意味着:
globalDictionary
的键中引用了hostDictionary
。如果您想要副本,请像hashcode55所说的那样调用hostDictionary.copy()
或hostDictionary.deepcopy()
hostDictionary={'a':a,'b':b,'c':c}
globalDictionary[host]
引用的每个操作的对象我想如果你像这样初始化dict会更快
lobalDictionary[host] = {
"a": a,
"b": b,
"c": c
}
此外,如果您不想使用copy或deepcopy,您可以按如下方式复制词典:
host = hostname
hostDictionary["a"] = a
hostDictionary["b"] = b
hostDictionary["c"] = c
globalDictionary[host] = hostDictionary
globalDictionary[host] = dict(hostDictionary.items())
或
我想如果你像这样初始化dict会更快
lobalDictionary[host] = {
"a": a,
"b": b,
"c": c
}
此外,如果您不想使用copy或deepcopy,您可以按如下方式复制词典:
host = hostname
hostDictionary["a"] = a
hostDictionary["b"] = b
hostDictionary["c"] = c
globalDictionary[host] = hostDictionary
globalDictionary[host] = dict(hostDictionary.items())
或
“这是将整个hostDictionary复制到global的键中还是只是引用它?”它只是引用它,例如
a={};b={'a':a};b['a']是a==True
。“有更好的方法吗?”也许。你能更详细地解释一下你想要达到的目标吗?“这更快吗?”我的猜测可能不是,因为索引的开销要大得多。它目前需要多长时间,需要多快?在绝大多数情况下,这种优化都是微不足道的,不值得花时间仔细考虑。@ali\m我正在创建一个包含所有主机的字典,其中包含详细信息。然后是一个全局dict,其中主机作为键,它的所有值作为细节。有了这个,我可以为任何主机查询一次全局dict,而不是查找ip dict并查询它,如果它的任何属性发生变化,任何其他功能也可以编辑它。“这是将整个hostDictionary复制到全局的键中还是只是引用它?”它只是引用它,例如a={};b={'a':a};b['a']是a==True
。“有更好的方法吗?”也许。你能更详细地解释一下你想要达到的目标吗?“这更快吗?”我的猜测可能不是,因为索引的开销要大得多。它目前需要多长时间,需要多快?在绝大多数情况下,这种优化都是微不足道的,不值得花时间仔细考虑。@ali\m我正在创建一个包含所有主机的字典,其中包含详细信息。然后是一个全局dict,其中主机作为键,它的所有值作为细节。有了这个,我可以为任何主机查询一次全局dict,而不是查找ip dict并查询它,如果它的任何属性发生变化,任何其他功能也可以编辑它。