python - 从两个列表创建字典?在取平均值时?

标签 python python-3.x list dictionary count

stackoverflow 的向导,

我想合并两个列表来创建一个字典,我用过dict & zip,但是它不符合我的要求。

如果有这些列表

  keys = ['a', 'a', 'b', 'c']
values = [6, 2, 3, 4]

我希望字典能够反射(reflect)平均值,这样输出将是:

a_dict = {'a' : 4, 'b' : 3, 'c' : 4}

作为奖励但不是必需的,如果可能的话,是否可以计算每个副本的数量? 即输出后跟 'a' 被计算两次,而不仅仅是在键中进行计数。

最佳答案

一个简单的解决方案(感谢@DeepSpace 的字典理解建议):

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}

关于python - 从两个列表创建字典?在取平均值时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62109733/

相关文章:

list - 如何解决这个列表反转问题?

list - python : create a pandas data frame from a list

python - 根据完全和/或部分匹配对列表进行排序

python-3.x - 从 PKS 文件中获取 python signxml 的证书和 key

python - 将自定义 python 库上传到 azure 工件

python - f.readline() 不捕获文件的最后一行

python - 子类层次结构中的链式方法要执行以获得层次结构中所有方法执行的联合

java - 找到一个人的推文中最流行的词

python - Python 标准模块中是否有此功能的类似物?

python - 如何提高分而治之的运行时间?