<p>从替换这个开始:</p>
<pre><code>for i in range(0,len(data_list)-1):
result_u1+=data_list[i][0].values()[0][0]
result_u2+=data_list[i][0].values()[0][1]
result_u3+=data_list[i][0].values()[0][2]
print "UNWEIGHTED",result_u1/4,result_u2/4,result_u3/4
</code></pre>
<p>有了这个:</p>
^{pr2}$
<p>在其他地方应用类似的更改。这假设您的数据实际上是“矩形”的,也就是说每个对应的内部列表都有相同数量的值。在</p>
<p>更“Python”的[*]版本:</p>
^{3}$
<p>是:</p>
<pre><code>for j, dataval in enumerate(data_list[i][0].values()[0]):
result_u[j] += dataval
</code></pre>
<p>但是,您的代码存在一些问题:</p>
<ul>
<li><code>values()[0]</code>可能会给您字典中的任何值,因为字典是无序的。也许它碰巧给了你未加权的数据,也许没有。在</li>
<li>我搞不懂为什么要在0到<code>len(data_list)-1</code>范围内循环:如果你想包括所有你需要的运动<code>0</code>到{<cd4>},因为<code>range</code>的第二个参数,上限,是<em>排除的</em>。在</li>
</ul>
<p>您也许可以考虑将数据重新格式化为这样:</p>
<pre><code>DEMO_LIST = {
'cricket' : {
'unweighted' : [1,2,3],
'weighted' : [4,5,6],
'manual' : [7,8,9],
'average' : [10,11,12],
},
'rugby' : ...
}
</code></pre>
<p>一旦你在每种运动的字典中有相同的键,你就可以用<code>values()[0]</code>替换<code>['unweighted']</code>,这样你就总能得到正确的字典条目。一旦有了大量具有相同键的字典,就可以用一个类或一个命名元组替换它们,以定义/强制这些值必须始终存在:</p>
<pre><code>import collections
Sport = collections.namedtuple('Sport', 'unweighted weighted manual average')
DEMO_LIST = {
'cricket' : Sport(
unweighted = [1,2,3],
weighted = [4,5,6],
manual = [7,8,9],
average = [10,11,12],
),
'rugby' : ...
}
</code></pre>
<p>现在可以将<code>['unweighted']</code>替换为<code>.unweighted</code>。在</p>
<p>[*]单词“Pythonic”的正式意思是“以Python程序员的风格完成,利用任何有用的Python特性来生成最好的惯用Python代码”。在实践中,它通常意味着“我更喜欢这样,而且我是一个Python程序员,因此这是编写Python的正确方法”。如果你是Guido van Rossum,这是权威的论据;如果你不是,那就是诉诸模糊权威。在几乎所有的情况下,都可以用“good IMO”代替,而不改变句子的意思;—)</p>