<p>假设你的数据在<code>stuff.csv</code>。从加载开始</p>
<pre><code>tups = [l.strip().split(' ') for l in open('stuff.csv') if l.strip()]
>>> tups
[['reg1', 'test1', 'f', 'day1'],
['reg1', 'test2', 'p', 'day1'],
['reg1', 'test3', 'p', 'day2'],
['reg1', 'test2', 'p', 'day2'],
['reg1', 'test2', 'p', 'day3'],
['reg1', 'test4', 'f', 'day3']]
</code></pre>
<p>现在找到所有可能的日子</p>
<pre><code>days = sorted(set(tup[3] for tup in tups))
>>> days
{'day1', 'day2', 'day3'}
</code></pre>
<p>现在计算regs和tests的所有条目</p>
<pre><code>from collections import defaultdict
d = defaultdict(dict)
for tup in tups:
d[(tup[0], tup[1])][tup[3]] = tup[2]
>>> d
defaultdict(dict,
{('reg1', 'test1'): {'day1': 'f'},
('reg1', 'test2'): {'day1': 'p', 'day2': 'p', 'day3': 'p'},
('reg1', 'test3'): {'day2': 'p'},
('reg1', 'test4'): {'day3': 'f'}})
</code></pre>
<p>最后,计算输出列表:</p>
<pre><code>out = []
for e in d:
out.append(
list(e) + [d[e][day] if day in d[e] else '-' for day in days])
>>> out
[['reg1', 'test2', 'p', 'p', 'p'],
['reg1', 'test4', '-', 'f', '-'],
['reg1', 'test1', '-', '-', 'f'],
['reg1', 'test3', 'p', '-', '-']]
</code></pre>
<p>在CSV中输出这个应该很简单。你知道吗</p>