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/