<p>这里有一个更优雅的解决方案。(只要您的文件严格遵守示例中的格式,即四行数据后面跟着一条虚线。)</p>
<pre><code>from itertools import izip # skip this line if you are using Python 3
with open('info.txt') as f:
result = [{'first name': first.strip(), 'Surname': sur.strip(),
'Email': mail.strip(), 'student': stud.strip()}
for first, sur, mail, stud, _ in izip(*[f]*5)]
</code></pre>
<p>这将为您提供如下词典列表:</p>
^{pr2}$
<p>其中“index 1”对应于列表的第一个元素(即<code>result[0]</code>),“index 2”对应于列表的第二个元素,依此类推。在</p>
<p>例如,您可以通过以下方式获得<code>index == 2</code>的姓氏:</p>
<pre><code>index = 2
result[index - 1]['Surname']
</code></pre>
<p>如果你真的为索引的移位而烦恼,你可以根据结果建立一个字典。演示:</p>
<pre><code>>>> result = dict(enumerate(result, 1))
>>> result
{1: {'first name': 'firstname1', 'Surname': 'surname1', 'Email': 'email@email.com1', 'student': 'student1'}, 2: {'first name': 'firstname2', 'Surname': 'surname2', 'Email': 'email@email.com2', 'student': 'student2'}}
>>>
>>> result[2]['Surname']
'surname2'
>>>
>>> for index, info in result.items():
... print index, info['first name'], info['Surname'], info['Email'], info['student']
...
1 firstname1 surname1 email@email.com1 student1
2 firstname2 surname2 email@email.com2 student2
</code></pre>