用字典制作字典

如何解决用字典制作字典

我是python的初学者,现在很难用字典制作字典。我有一本字典,想知道如何用该字典制作每种食物平均价格的另一本字典。字典看起来像这样:

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

我假设您可以使用循环使之成为可能。

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

解决方法

为了计算任何统计信息,您应该创建一个数据样本。在这种情况下,您可以为每种国家/地区的食物建立样本词典。在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()}
,

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

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

In [137]: food.values()
Out[137]: 
[['Pasta Primavera','Italian',1000,8.5],['Pizza Margarita',1200,7.5],['Hamburger','American',1100,5.5],['Milkshake',700,3.0],['Bruscetta',500,6.0],['Sauerkraut','German',300,4.0],['Sausage',7.0],['Apfelstrudel',750,4.5],['Sauerbraten',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,'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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?