擅长:python、mysql、java
<p>无需深入研究您要做的事情,您可以将<code>if</code>语句重写为<em>not</em>如果键不存在,则抛出一个错误:</p>
<pre><code>if dict_.get(each[1][0], {}).get(each[1][1], None):
dict_[each[1][0]][each[1][1]].append(each[0])
</code></pre>
<p><code>dict.get</code>是一个非常有用的函数,因为如果给定的键不存在,它将返回一个特定的默认值。在</p>
<p>而且,似乎你希望有一个列表存在。在<code>else</code>块中,您是有意这样做的吗?在</p>
^{pr2}$
<p>这将创建一个包含单个元素的列表,因此现在<code>dict[...][...].append(...)</code>就可以工作了。在</p>
<p>我还建议不要使用<code>dict</code>来命名变量。它隐藏了内置类。在</p>
<p>进一步的改进可能包括在for循环的头中解包项,因此您不必执行<code>each[0]</code>、<code>each[1]</code>等操作。您可以使用类似于:</p>
<pre><code>for idx, pair in longlist:
x, y = pair # unpack each pair now
...
</code></pre>
<hr/>
<p>完整列表:</p>
<pre><code>dict_ = {}
for idx, pair in longlist:
x, y = pair
if dict_.get(x, {}).get(y, None):
dict_[x][y].append(idx)
else:
dict_[x] = {y : [idx] }
</code></pre>
<p>这比以前更易读。在</p>