Tôi không nghĩ bạn cần defaultdict
ở đây chút nào. Tại sao không chỉ sử dụng dict.setdefault
phương pháp?
>>> d = {}
>>> d.setdefault('p', C('p')).v
'p'
Điều đó tất nhiên sẽ tạo ra nhiều trường hợp C
. Trong trường hợp đó là một vấn đề, tôi nghĩ rằng cách tiếp cận đơn giản hơn sẽ làm:
>>> d = {}
>>> if 'e' not in d: d['e'] = C('e')
Nó sẽ nhanh hơn defaultdict
hoặc bất kỳ thay thế nào khác theo như tôi có thể thấy.
ETA liên quan đến tốc độ in
kiểm tra so với sử dụng điều khoản thử ngoại trừ:
>>> def g():
d = {}
if 'a' in d:
return d['a']
>>> timeit.timeit(g)
0.19638929363557622
>>> def f():
d = {}
try:
return d['a']
except KeyError:
return
>>> timeit.timeit(f)
0.6167065411074759
>>> def k():
d = {'a': 2}
if 'a' in d:
return d['a']
>>> timeit.timeit(k)
0.30074866358404506
>>> def p():
d = {'a': 2}
try:
return d['a']
except KeyError:
return
>>> timeit.timeit(p)
0.28588609450770264