python - 从两个列表创建字典?在取平均值的同时?
问题描述
stackoverflow的奇才,
我希望结合两个列表来创建一个字典,我使用了 dict & zip,但是它不符合我的要求。
如果有这些清单
keys = ['a', 'a', 'b', 'c']
values = [6, 2, 3, 4]
我希望字典能够反映平均值,以便输出为:
a_dict = {'a' : 4, 'b' : 3, 'c' : 4}
作为奖励但不是必需的,如果可能的话,是否有办法计算每个重复项?即输出后跟“a”被计算了两次,而不仅仅是在键中进行计数。
解决方案
一个简单的解决方案(感谢@DeepSpace 的 dict-comprehension 建议):
keys = ['a', 'a', 'b', 'c']
values = [6, 2, 3, 4]
out = {}
for k, v in zip(keys, values):
out.setdefault(k, []).append(v)
out = {key: sum(value) / len(value) for key, value in out.items()}
print(out)
印刷:
{'a': 4.0, 'b': 3.0, 'c': 4.0}
如果您想要键数,您可以执行以下操作:
out = {}
for k, v in zip(keys, values):
out.setdefault(k, []).append(v)
out = {key: (sum(value) / len(value), len(value)) for key, value in out.items()}
print(out)
印刷:
{'a': (4.0, 2), 'b': (3.0, 1), 'c': (4.0, 1)}
值的第二个元素是键的计数。
解决方案itertools
(如果键已排序):
keys = ['a', 'a', 'b', 'c']
values = [6, 2, 3, 4]
from itertools import groupby
from statistics import mean
out = {}
for k, g in groupby(zip(keys, values), lambda k: k[0]):
out[k] = mean(v for _, v in g)
print(out)
印刷:
{'a': 4, 'b': 3, 'c': 4}
推荐阅读
- c# - SQL - ASP.NET Core 2.1.7 中的有意注入
- javascript - 我怎样才能改变输入范围的蓝色?
- html - 表格行的css插入框阴影?
- wpf - 如何在 WPF 中为 DataGridColumnHeader 创建工具提示?
- sql - 选择具有附加分组列的组的第一行
- docker - 在 Docker Golang SDK 中为 client.ImagePull() 禁用详细标准输出
- flutter - Flutter 应用程序:记住用户做某事的简单方法
- http-headers - NuxtJS 内容安全策略
- c# - 使用文本文件时如何修复非法字符错误
- python-3.x - 尝试绘制散点图时不断收到此“TypeError:'str' object is not callable”