<p>这应该做到:</p>
<pre><code>from __future__ import print_function
import csv
import sys
if sys.version_info.major < 3:
input = raw_input
input_gender = 'Boy' # could make this a user-supplied value too
input_year = input('Please enter the year: ').strip()
file_name = 'babyQldAll.csv'
with open(file_name) as fobj:
csv_file = csv.reader(fobj)
name_counts = {}
for row in csv_file:
year, name, count, gender = (entry.strip() for entry in row)
if year == input_year and gender == input_gender:
name_counts[name] = int(count)
print('Popular {} names in year {} are:'.format(input_gender.lower(), input_year))
for name, count in name_counts.items():
print(name, count)
print('\nBoys names in alphabetical order:')
for name in sorted(name_counts.keys()):
print(name)
print('\nBoys names in alphabetical order and counts:')
for name, count in sorted(name_counts.items()):
print('{}: {}'.format(name, count))
</code></pre>
<p>注意事项:</p>
<ol>
<li><p>在python2中,应该使用<code>raw_input</code>,在
Python 3。一种方法是让您的程序在python2中以同样的方式工作
第三种方法是在文件的开头添加以下内容:</p>
<pre><code>import sys
if sys.version_info.major < 3:
input = raw_input
</code></pre>
<p>现在您可以使用<code>input</code>,而不管是什么Python版本。</p></li>
<li><p>您的输入在逗号后有一个空格。因为只有csv读卡器
查找逗号,空格是列表中字符串的一部分
一排。用<code>(entry.strip() for entry in row)</code>解出来
这个。</p></li>
<li><p>所以我比较了一个字符串的年份。我也许值得改变信仰
两者,<code>input_year</code>和<code>year</code>到和<code>int</code>并比较它们。</p></li>
</ol>
<p>用问题中的示例文件运行程序如下:</p>
<pre><code>Please enter the year: 2010
Popular boy names in year 2010 are:
Tom 111
Steven 212
Boys names in alphabetical order:
Steven
Tom
Boys names in alphabetical order and counts:
Steven: 212
Tom: 111
</code></pre>