<h3>第一次通过文件:</h3>
<p>在我看来,最关键的部分是如何识别哪种形式的成对。我使用了以下代码片段:</p>
<pre><code>splitline = line.strip().split()
identifier = "".join(splitline[1:3])[1:]
# You could also write the following, if that makes it more clear:
identifier = splitline[1][1:] + splitline[2]
</code></pre>
<p>基本上,<code>"".join(splitline[1:3])[1:]</code>所做的就是从<code>HF1 1</code>生成标识符字符串<code>F11</code>(它省略了第一个字符),如果它只出现在“F”中,或者同时出现在“H”中(反之亦然),则基本上应该测试它。在</p>
<p>在本例中,<code>EF1 with chain 1</code>和<code>HF1 with chain 1</code>都会产生标识符<code>F11</code>。第一次出现这些情况时,它设置<code>categories['F11'] = 1</code>。当它找到对时,它设置<code>categories['F11'] = 2</code></p>
<p>如果我们使用一次或者两次为这个结果建立一个字典。在</p>
<h3>建立了分类字典之后,我们可以下次再浏览该文件:</h3>
<p>如果在<code>categories</code>中,一个标识符的值是<code>1</code>,那么我们就知道该行应该放在<code>ace</code>中,如果该值是<code>2</code>,那么我们就知道应该将该项写入<code>F</code>或{<cd14>}。在</p>
<p>这个解决方案将是相当快的,因为我们正在处理字典;如果您想维护列表中的顺序,请告诉我,然后我可以相应地更新。在</p>
<p>代码如下:</p>
^{pr2}$
<p>现在您可以通过<code>result["H"]</code>、<code>result["F"]</code>和<code>result["ace"]</code>来访问这些组。在</p>
<p>下面是打印结果的代码:</p>
<pre><code>for type in result:
print("\n",type, "list:", "\n", "\n ".join(result[type]))
</code></pre>
<blockquote>
<pre><code>H list:
line HF1 1 H Hyd 7.11 5.11 7.11
line HE2 2 H Hyd 7.11 5.11 7.11
F list:
line EF1 1 F Flu 5.7 3.221 9.332
line EE2 2 F Flu 5.7 3.221 9.332
ace list:
line EE2 1 F Flu 5.7 3.221 9.332
line EF1 2 F Flu 5.7 3.221 9.332
</code></pre>
</blockquote>