<p>我觉得使用Python REPL来测试这一点更容易</p>
<pre class="lang-py prettyprint-override"><code>$ python
>>> string = """\
Estimated Composition (night, particles per cubic cm):
Helium 4 - 40,000 ; Neon 20 - 40,000 ; Hydrogen - 35,000
Argon 40 - 30,000 ; Neon 22 - 5,000 ; Argon 36 - 2,000
Methane - 1000 ; Ammonia - 1000 ; Carbon Dioxide - 1000\
"""
>>> lines = string.split('\n')
>>> lines
['Estimated Composition (night, particles per cubic cm):', 'Helium 4 - 40,000 ; Neon 20 - 40,000 ; Hydrogen - 35,000', 'Argon 40 - 30,000 ; Neon 22 - 5,000 ; Argon 36 - 2,000', 'Methane - 1000 ; Ammonia - 1000 ; Carbon Dioxide - 1000']
>>> lines[1:]
['Helium 4 - 40,000 ; Neon 20 - 40,000 ; Hydrogen - 35,000', 'Argon 40 - 30,000 ; Neon 22 - 5,000 ; Argon 36 - 2,000', 'Methane - 1000 ; Ammonia - 1000 ; Carbon Dioxide - 1000']
>>> [line.split(' ; ') for line in lines[1:]]
[['Helium 4 - 40,000', 'Neon 20 - 40,000', 'Hydrogen - 35,000'], ['Argon 40 - 30,000', 'Neon 22 - 5,000', 'Argon 36 - 2,000'], ['Methane - 1000', 'Ammonia - 1000', 'Carbon Dioxide - 1000']]
>>> [line.split(' - ') for line in lines[1:] for line in line.split(' ; ')]
[['Helium 4', '40,000'], ['Neon 20', '40,000'], ['Hydrogen', '35,000'], ['Argon 40', '30,000'], ['Neon 22', '5,000'], ['Argon 36', '2,000'], ['Methane', '1000'], ['Ammonia', '1000'], ['Carbon Dioxide', '1000']]\
</code></pre>
<p>最后,创建具有所需映射的dictionary对象:</p>
<pre class="lang-py prettyprint-override"><code>>>> dict([line.split(' - ') for line in lines[1:] for line in line.split(' ; ')])
{'Helium 4': '40,000', 'Neon 20': '40,000', 'Hydrogen': '35,000', 'Argon 40': '30,000', 'Neon 22': '5,000', 'Argon 36': '2,000', 'Methane': '1000', 'Ammonia': '1000', 'Carbon Dioxide': '1000'}
</code></pre>
<p>要根据需要转换键值对(即,将字典中的所有键大写并将所有值转换为<code>int</code>),可以使用辅助函数转换键值对,如下所示:</p>
<pre class="lang-py prettyprint-override"><code>>>> transform = lambda x, y: (x.upper(), int(y.replace(',', '')))
>>> dict([transform(*name_line.split(' - ')) for line in lines[1:] for name_line in line.split(' ; ')])
{'HELIUM 4': 40000, 'NEON 20': 40000, 'HYDROGEN': 35000, 'ARGON 40': 30000, 'NEON 22': 5000, 'ARGON 36': 2000, 'METHANE': 1000, 'AMMONIA': 1000, 'CARBON DIOXIDE': 1000}
</code></pre>