<p>回到基础,香草python,方法:</p>
<p>我们首先将当前数据转换为一个列表:</p>
<pre class="lang-py prettyprint-override"><code>In [137]: food.values()
Out[137]:
[['Pasta Primavera', 'Italian', 1000, 8.5],
['Pizza Margarita', 'Italian', 1200, 7.5],
['Hamburger', 'American', 1100, 5.5],
['Milkshake', 'American', 700, 3.0],
['Bruscetta', 'Italian', 500, 6.0],
['Sauerkraut', 'German', 300, 4.0],
['Sausage', 'German', 500, 7.0],
['Apfelstrudel', 'German', 750, 4.5],
['Sauerbraten', 'German', 950, 10.0]]
</code></pre>
<p>现在,我们可以在每个元素上循环,将我们想要的信息添加到字典中:</p>
<pre class="lang-py prettyprint-override"><code>
all_data = {}
for i in food.values():
try:
# add price (last element) to a list of all items in country (i[1])
all_data[i[1]].append(i[-1])
except KeyError:
# if we dont have this country yet, create it
all_data[i[1]] = [i[-1]]
</code></pre>
<p>这给了我们:</p>
<pre class="lang-py prettyprint-override"><code>In [144]: all_data
Out[144]:
{'American': [5.5, 3.0],
'German': [4.0, 7.0, 4.5, 10.0],
'Italian': [8.5, 7.5, 6.0]}
</code></pre>
<p>最后,我们可以将每个字典元素替换为其平均值:</p>
<pre class="lang-py prettyprint-override"><code>for country in all_data:
values = all_data[country]
mean = sum(values)/float(len(values))
# replace the list with the mean value
all_data[country] = mean
</code></pre>
<p>这将产生您所需要的:</p>
<pre><code>In [147]: all_data
Out[147]: {'American': 4.25, 'German': 6.375, 'Italian': 7.333333333333333}
</code></pre>
<p>如果要求结果为两个小数点,还可以使用c样式格式将其转换为字符串:<code>'%.2f'%mean</code></p>