<p>A)将代码分解为可管理的块:</p>
<pre><code>from collections import defaultdict
result = defaultdict(dict)
for (cat, sub, num, percent) in input_list:
result[cat][sub] = [num, percent]
</code></pre>
<p>现在我们有了一个玩家计数的dict,但是唯一有效的百分比是total,我们没有全局计数。你知道吗</p>
<pre><code>from collections import Counter
def build_global(dct):
keys = Counter()
for key in dct:
if key == "Global Total":
continue
for sub_key in dct[key]:
keys[sub_key] += dct[key][sub_key][0]
for key in keys:
dct["Global Total"][key] = [keys[key], 100]
</code></pre>
<p><code>build_global(result)</code>现在为每个事件生成有效的全局计数。你知道吗</p>
<p>最后:</p>
<pre><code>def calc_percent(dct):
totals = dct["Global Total"]
for key in dct:
local_total = 0
if key == "Global Total":
continue
for sub_key in dct[key]:
local_total += dct[key][sub_key][0]
dct[key][sub_key][1] = (dct[key][sub_key][0]/float(totals[sub_key][0])) * 100
dct[key]['Total'] = [local_total, (local_total/float(dct['Global Total'][None][0])) * 100]
</code></pre>
<p><code>calc_percent(result)</code>遍历并构建百分比。你知道吗</p>
<p>结果是:</p>
<pre><code>defaultdict(<type 'dict'>,
{'Player2': {'A': [7, 87.5], 'B': [65, 81.25], 'Total': [72, 81.81818181818183]},
'Player1': {'A': [1, 12.5], 'B': [15, 18.75], 'Total': [16, 18.181818181818183]},
'Global Total': {'A': [8, 100], None: [88, 100], 'B': [80, 100]}})
</code></pre>
<p>如果您确实需要它,您可以删除global total中的<code>None</code>条目,并<code>dict(result)</code>将<code>defaultdict</code>转换为香草<code>dict</code>。你知道吗</p>