<p><strong>聪明的方法(1次通过您的列表):</strong></p>
<pre><code>from collections import defaultdict
name_list = ["David Joyner", "David Zuber", "Brenton Joyner",
"Brenton Zuber", "Nicol Barthel", "Shelba Barthel",
"Shelba Crowley", "Shelba Fernald", "Shelba Odle",
"Shelba Fry", "Maren Fry"]
rv = defaultdict(list)
for elem in name_list:
rv[elem.split()[0]].append(elem)
print(dict(rv))
</code></pre>
<p>输出:</p>
^{pr2}$
<hr/>
<p><strong>慢方式(看起来不错,但效率低下):</strong></p>
<pre><code>d = {key:[n for n in name_list if n.startswith(key)]
for key in set( p.split()[0] for p in name_list)}
</code></pre>
<p>这在计算上比<code>defaultdict</code>版本差得多,因为它多次遍历列表:</p>
<ul>
<li><em>一次</em>创建<code>set( p.split()[0] for p in name_list)</code></li>
<li>对于我们刚刚收集到的每个名称,它都会再次遍历完整列表来创建dict值<code>[n for n in name_list if n.startswith(key)]</code></li>
</ul>
<hr/>
<p>如果以后需要排序,只需在<code>dict</code>的值上使用<code>list.sort()</code>:</p>
<pre><code># sorting the data afterwards
for k in rv:
rv[k].sort(key = lambda x:x.split()[1]) # to sort by last names
</code></pre>
<p>输出:</p>
<pre><code># only difference when sorted: see key `Shelba`
{'David': ['David Joyner', 'David Zuber'],
'Brenton':['Brenton Joyner', 'Brenton Zuber'],
'Nicol': ['Nicol Barthel'],
'Shelba': ['Shelba Barthel','Shelba Crowley','Shelba Fernald','Shelba Fry','Shelba Odle'],
'Maren': ['Maren Fry']}
</code></pre>