ฉันไม่คิดว่าคุณต้องการdefaultdictที่นี่เลย ทำไมไม่ใช้dict.setdefaultวิธีการ?
>>> d = {}
>>> d.setdefault('p', C('p')).v
'p'
แน่นอนว่าจะสร้างอินสแตนซ์Cมากมาย ในกรณีที่เป็นปัญหาฉันคิดว่าแนวทางที่ง่ายกว่าจะทำ:
>>> d = {}
>>> if 'e' not in d: d['e'] = C('e')
มันจะเร็วกว่าdefaultdictทางเลือกอื่น ๆ เท่าที่ฉันเห็น
ETAเกี่ยวกับความเร็วของinการทดสอบเทียบกับการใช้ประโยค try-except:
>>> 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