<p>在这里,<code>OrderedDict</code>更适合使用名称作为键:</p>
<pre><code>>>> from collections import OrderedDict
>>> lis = ['Adam', 'PHYS 1444', 'Ajoy', 'MATH 1426', 'Ajoy', 'CSE 2315', 'August', 'CSE 1320', 'August', 'CSE 2315', 'Chiao-Lin', 'PHYS 1443', 'Dylan', 'CSE 2315', 'Isis', 'CSE 3380', 'James', 'PHYS 1443', 'Jonathan', 'PHYS 1444', 'Jonathan', 'CSE 3380', 'Katherine', 'MATH 2325', 'Michael', 'CSE 1320', 'Randal', 'IE 3312', 'Saroj', 'PHYS 1443', 'Taesu', 'PHYS 1444', 'Taesu', 'CSE 2315', 'Taesu', 'CSE 3380', 'Timothy', 'CSE 3380', "Tre'Shaun", 'CSE 1320']
>>> my_dict = OrderedDict()
>>> for name, marks in zip(*[iter(lis)]*2):
my_dict.setdefault(name, []).append(marks)
...
>>> for k, v in my_dict.items():
... print k, v
...
Adam ['PHYS 1444']
Ajoy ['MATH 1426', 'CSE 2315']
August ['CSE 1320', 'CSE 2315']
Chiao-Lin ['PHYS 1443']
Dylan ['CSE 2315']
Isis ['CSE 3380']
James ['PHYS 1443']
Jonathan ['PHYS 1444', 'CSE 3380']
Katherine ['MATH 2325']
Michael ['CSE 1320']
Randal ['IE 3312']
Saroj ['PHYS 1443']
Taesu ['PHYS 1444', 'CSE 2315', 'CSE 3380']
Timothy ['CSE 3380']
Tre'Shaun ['CSE 1320']
</code></pre>
<hr/>
<p>如果输入列表中的名称未排序,则使用普通的<code>dict</code>或<code>defaultdict(list)</code>,并在迭代期间使用<code>sorted</code>:</p>
<pre><code>for k, v in sorted(my_dict.items()):
</code></pre>