<p>如果有重复键,则需要将值存储在某个容器中,如果要对数据进行排序,则需要使用<a href="https://docs.python.org/2/library/collections.html#collections.OrderedDict" rel="nofollow">OrderedDict</a>:</p>
<pre><code>import csv
from collections import OrderedDict
with open("in.csv") as infile, open('file2.csv', mode='w') as outfile:
d = OrderedDict()
reader, writer = csv.reader(infile), csv.writer(outfile)
header = next(reader) # skip header
# choose whatever column names you want
writer.writerow(["id-crse","score"])
# unpack the values from each row
for yr, cre, stid, scr in reader:
# use id and course as keys and append scores
d.setdefault("{} {}".format(stid, cre),[]).append(scr)
# iterate over the dict keys and values and write each new row
for k,v in d.items():
writer.writerow([k] + v)
</code></pre>
<p>这会给你一些类似的东西:</p>
<pre><code>id-crse,score
100 CS301,363
101 CS301,283
102 CS301,332
103 CS301,254
101 CS302,466
102 CS302,500
</code></pre>
<p>在您自己的代码中,您只存储键的最后一个值,也只使用<code>writer.writerows(mydict)</code>编写键,因为您只是迭代dict的键,而不是键和值。如果数据不是按时间顺序排列的,则必须使用itemgetter调用reader对象上的sorted:</p>
<pre><code>for yr, cre, stid, scr in sorted(reader,key=operator.itemgetter(3)):
............
</code></pre>