<p>您的帽子戏法正在使用<a href="https://docs.python.org/release/2.5.2/lib/defaultdict-objects.html" rel="nofollow">the defaultdict from the collections module</a>,请搜索</p>
<blockquote>
<p>python defaultdict</p>
</blockquote>
<p>所以,你会发现很多有用的例子,下面是我的答案</p>
<pre><code>import csv
from collections import defaultdict
# slurp the data
data = list(csv.reader(open('points.csv')))
# massage the data
for i, row in enumerate(data[1:],1):
data[i] = [int(elt) if elt.isdigit() else elt for elt in row]
points = {} # an empty dictionary
for i, country in enumerate(data[0][2:],2):
# for each country, a couple country:defaultdict is put in points
points[country] = defaultdict(int)
for row in data[1:]:
opponent = row[1]
points[country][opponent] += row[i]
# here you can post-process points as you like,
# I'll simply print out the stuff
for country in points:
for opponent in points[country]:
print country, "vs", opponent, "scored",
print points[country][opponent], "points."
</code></pre>
<p>数据的示例输出是</p>
^{pr2}$
<p><strong>编辑</strong></p>
<p>如果您反对<code>defaultdict</code>,那么可以使用普通<code>dict</code>的<code>.get</code>方法,该方法允许您在{<cd4>}对未初始化的情况下返回可选的默认值</p>
<pre><code> points[country] = {} # a standard empty dict
for row in data[1:]:
opponent = row[1]
points[country][opponent] = points[country].get(opponent,0) + row[i]
</code></pre>
<p>如您所见,它有点笨拙,但仍然可以管理。在</p>