擅长:python、mysql、java
<p>当你可以简单地<code>split</code>时,为什么还要处理<code>rfind</code>和<code>find</code>呢</p>
<pre><code>def read_student(ifile):
D = {}
f1 = open(ifile,'r')
for line in f1:
cols = line.split() # Splits at one or more whitespace
surname = cols[0].strip()
department = cols[-2].strip() # Because you know the last-but-one is dept
gpa = float(cols[-1].strip()) # Because you know the last one is GPA
fname = ' '.join(cols[1:-2]).strip()
# cols[1:-2] gives you everything starting at col 1 up to but excluding the second-last.
# Then you join these with spaces.
if department not in D:
D[department] = [(surname, gpa)]
else:
D[department].append((surname, gpa))
f1.close()
return D
</code></pre>
<p>如果您知道您的列总是由<code>\t</code>分隔,那么您可以改为使用<code>cols = line.split('\t')</code>。第二栏是学生的名字,第三栏是系,第四栏是GPA</p>
<p>有几点建议:</p>
<ol>
<li>您可以使用<code>defaultdict</code>来避免每次检查<code>if department not in D</code></li>
<li>您可以使用<code>with</code>来管理文件的读取,这样就不必担心<code>f1.close()</code>。这是在Python中读取文件的首选方法</李>
</ol>