使用以下内容实际执行“是不好的做法”如果dict和key存在,添加一个项目,如果没有,先创建dict和键然后添加到它“< / em>的
其他问题:我是否必须在实例化时self.elements = {}
首次添加它才能工作,或者是否会在第一次self.elements[elemType] = ...
时动态创建它?
它在控制台中工作,但我确信我之前有过这样的错误。
try:
self.elements[elemType][elemObj.id] = elemObj
except KeyError as _:
self.elements[elemType] = {elemObj.id:elemObj}
答案 0 :(得分:0)
异常总是很慢。您可以通过使用dict update来分配值。
>>> foo = {1: {}}
>>> foo[1].update({1: 2})
>>> foo
{1: {1: 2}}
>>> foo[1].update({1: 3})
>>> foo
{1: {1: 3}}
>>> foo[1].update({2: 4})
>>> foo
{1: {1: 3, 2: 4}}
所以在你的情况下,它看起来像
self.elements[elemType].update({elemObj.id: elemObj})
如果元素[elemType]可能不存在,则更复杂
self.elements.update({elemType: {elemObj.id: elemObj} })
对于不覆盖elemType - 可以检查它是否不存在。
if elemType not in self.elements:
self.elements[elemType] = {}
self.elements[elemType].update({elemObj.id: elemObj})
答案 1 :(得分:0)
决定查看哪些内容仍然有效if
或try
。
d = {}
for i in range(int(1e+6)):
if i in d:
d[i] += 1
else:
d[i] = 1
d = {}
for i in range(int(1e+6)):
try:
d[i] += 1
except KeyError:
d[i] = 1
$ time python if.py
real 0m0.269s
user 0m0.224s
sys 0m0.044s
$ time python try.py
real 0m0.899s
user 0m0.858s
sys 0m0.040s
所以if
比try
快三倍。