Python 从两个列表创建词典?当取平均值时?

Python 从两个列表创建词典?当取平均值时?,python,python-3.x,list,dictionary,count,Python,Python 3.x,List,Dictionary,Count,stackoverflow的向导 我希望结合两个列表创建一个字典,我使用了dict&zip,但是它不符合我的要求 如果你有这些清单 keys = ['a', 'a', 'b', 'c'] values = [6, 2, 3, 4] 我希望字典反映平均值,以便输出为: a_dict = {'a' : 4, 'b' : 3, 'c' : 4} 作为奖励,但不是必需的,如果可能的话,是否可以获得每个副本的计数? i、 e.输出后面会跟两次“a”计数,而不仅仅是在键中进行计数。一个简单的解决方案

stackoverflow的向导

我希望结合两个列表创建一个字典,我使用了dict&zip,但是它不符合我的要求

如果你有这些清单

  keys = ['a', 'a', 'b', 'c']
values = [6, 2, 3, 4]
我希望字典反映平均值,以便输出为:

a_dict = {'a' : 4, 'b' : 3, 'c' : 4}
作为奖励,但不是必需的,如果可能的话,是否可以获得每个副本的计数?
i、 e.输出后面会跟两次“a”计数,而不仅仅是在键中进行计数。

一个简单的解决方案(感谢@DeepSpace提供dict理解建议):

印刷品:

{'a': 4.0, 'b': 3.0, 'c': 4.0}
{'a': (4.0, 2), 'b': (3.0, 1), 'c': (4.0, 1)}
{'a': 4, 'b': 3, 'c': 4}

如果要计算密钥数,可以执行以下操作,例如:

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, 'b': 3.0, 'c': 4.0}
{'a': (4.0, 2), 'b': (3.0, 1), 'c': (4.0, 1)}
{'a': 4, 'b': 3, 'c': 4}
其中,值的第二个元素是键的计数


使用
itertools
的解决方案(如果键已排序):

印刷品:

{'a': 4.0, 'b': 3.0, 'c': 4.0}
{'a': (4.0, 2), 'b': (3.0, 1), 'c': (4.0, 1)}
{'a': 4, 'b': 3, 'c': 4}

计算每个键的平均值和频率
dic={key:[avg,frequency]}

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

dic = {i:[[], 0] for i in keys}


for k, v in zip(keys, values):
    dic[k][0].append(v)
    dic[k][1]+=1

for k, v in dic.items():
    dic[k][0] = sum(dic[k][0])/len(dic[k][0])

print(dic)
输出

{'a': [4.0, 2], 'b': [3.0, 1], 'c': [4.0, 1]}

是的,它们是按键分组的。对于您的奖金问题,itertools确实有一个groupby函数,可以提供一个键在所提供的iTerab中显示的次数。我会使用dict comp,而不是奇怪的列表和
pop
转换。。。just
out={key:sum(value)/len(value)表示key,value-in-out.items()}
@DeepSpace是的,您是对的。我编辑了我的答案(并用itertools放了一个)。谢谢