<p><code>defaultdict</code>不是{<cd2>}(它是一个子类,可能要做太多的工作来帮助您通过这个练习学习),所以下面是一个简单的方法来使用普通的<code>dict</code>:</p>
<pre><code>dv = list()
# arbitrary sequence of numbers
seq = [2,4,5,2,4,6,3,8,9,3,7,2,47,2]
# dictionary counting number of occurances
seqDic = { }
for i in seq:
if i in seqDic:
seqDic[i] += 1
else:
dv.append(i)
seqDic[i] = 1
</code></pre>
<p>这种简单的方法在这里尤其有效,因为您无论如何都需要<code>if i in seqDic</code>测试来构建<code>dv</code>以及{<cd6>}。否则,更简单的方法是:</p>
^{pr2}$
<p>使用<code>dict</code>的便捷方法<code>get</code>,如果第一个参数不是字典中的键,则返回第二个参数。如果您喜欢这个想法,这里有一个解决方案,<em>同时也</em>构建<code>dv</code>:</p>
<pre><code>for i in seq:
seqDic[i] = 1 + seqDic.get(i, 0)
if seqDic[i] == 1: dv.append(i)
</code></pre>
<p><strong>编辑</strong>:如果不区分<code>dv</code>中项目的顺序(而不是希望<code>dv</code>与{<cd12>}中第一次出现的项的顺序相同),那么只需使用(在循环的简单版本之后)</p>
<pre><code>dv = seqDic.keys()
</code></pre>
<p>也可以(在python2中,<code>.keys</code>返回一个列表),也是如此</p>
<pre><code>dv = list(seqDic)
</code></pre>
<p>这在python2<strong>和python3中都很好。在同样的假设下(你不关心<code>dv</code>中项目的顺序),还有其他一些好的解决方案,比如</p>
<pre><code>seqDic = dict.fromkeys(seq, 0)
for i in seq: seqDic[i] += 1
dv = list(seqDic)
</code></pre>
<p>这里,我们首先使用字典的<code>fromkeys</code>类方法来构建一个新dict,它已经将<code>0</code>作为与每个键对应的值,这样我们就可以只增加每个条目,而不必进行{<cd17>}或成员资格检查。在</p>