擅长:python、mysql、java
<p><code>defaultdict</code>当默认值是静态的(比如一个新列表)时非常好,但如果它是动态的,就不那么好了。</p>
<p>例如,我需要一个字典来将字符串映射到唯一的int。<code>defaultdict(int)</code>将始终使用0作为默认值。同样,<code>defaultdict(intGen())</code>总是产生1。</p>
<p>相反,我用了一个常规的口述:</p>
<pre><code>nextID = intGen()
myDict = {}
for lots of complicated stuff:
#stuff that generates unpredictable, possibly already seen str
strID = myDict.setdefault(myStr, nextID())
</code></pre>
<p>注意<code>dict.get(key, nextID())</code>是不够的,因为我以后也需要能够引用这些值。</p>
<p><code>intGen</code>是我构建的一个小类,它自动递增一个int并返回其值:</p>
<pre><code>class intGen:
def __init__(self):
self.i = 0
def __call__(self):
self.i += 1
return self.i
</code></pre>
<p>如果有人能用<code>defaultdict</code>来做这件事,我很想看看。</p>