用字典编字典

2024-09-26 22:50:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的初学者,我很难从一本字典中制作一本字典。我有一本字典,我想知道如何用这本字典再编一本字典,每种食物的平均价格。字典如下所示:

food = {
    1: ['Pasta Primavera', 'Italian', 1000,  8.50],
    2: ['Pizza Margarita', 'Italian', 1200, 7.50],
    3: ['Hamburger', 'American', 1100,  5.50],
    4: ['Milkshake', 'American', 700, 3.00],
    5: ['Bruscetta', 'Italian', 500, 6.00],
    6: ['Sauerkraut', 'German', 300,  4.00 ],
    7: ['Sausage', 'German' , 500, 7.00],
    8: ['Apfelstrudel', 'German', 750, 4.50],
    9: ['Sauerbraten', 'German', 950, 10.00],
}

最后一个值是价格,食品类型是指数1。我正在寻找这样的输出:

newdict = {'Italian':7.33, 'American':4.25, 'German': 6.375 }

或者类似于:

newdict = {'Italian':[Average:7.33], 'American':[Average:4.25], 'German':[Average: 6.375]}

我假设你可以使用一个循环来实现这一点

编辑:我知道这不是一个代码编写服务。我很抱歉请求帮助。如果可以,我会删除此帖子。


Tags: 字典food食物averageamericangerman初学者italian
2条回答

回到基础,香草python,方法:

我们首先将当前数据转换为一个列表:

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]]

现在,我们可以在每个元素上循环,将我们想要的信息添加到字典中:


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]]

这给了我们:

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]}

最后,我们可以将每个字典元素替换为其平均值:

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

这将产生您所需要的:

In [147]: all_data
Out[147]: {'American': 4.25, 'German': 6.375, 'Italian': 7.333333333333333}

如果要求结果为两个小数点,还可以使用c样式格式将其转换为字符串:'%.2f'%mean

为了计算任何统计数据,您应该创建一个数据样本。在这种情况下,您可以为每个国家的食品建立一个样本词典。在Python中,defaultdict有一个很大的优势,即不需要检查键是否在dict中。然后,你就可以得到一本计算平均值的新词典

代码示例:

from collections import defaultdict

d = defaultdict(list)
for record in food.values():
    d[record[1]].append(record[-1])

average = {k: mean(v) for k, v in d.items()}

相关问题 更多 >

    热门问题