Python-在dict元素中查找平均值

Python-在dict元素中查找平均值,python,dictionary,average,pandas,Python,Dictionary,Average,Pandas,我的口述如下: dict = [{'a':2, 'b':3}, {'b':4}, {'a':1, 'c':5}] 我需要得到所有不同钥匙的平均值。结果应该如下所示: avg = [{'a':1.5, 'b':3.5, 'c':5}] 我可以获得所有键的摘要,但我没有意识到如何计算相同的键以获得平均数。您可以创建一个中间字典,以列表形式收集所有遇到的值: dct = [{'a':2, 'b':3}, {'b':4}, {'a':1, 'c':5}] from collections impor

我的口述如下:

dict = [{'a':2, 'b':3}, {'b':4}, {'a':1, 'c':5}]
我需要得到所有不同钥匙的平均值。结果应该如下所示:

avg = [{'a':1.5, 'b':3.5, 'c':5}]

我可以获得所有键的摘要,但我没有意识到如何计算相同的键以获得平均数。

您可以创建一个中间字典,以列表形式收集所有遇到的值:

dct = [{'a':2, 'b':3}, {'b':4}, {'a':1, 'c':5}]
from collections import defaultdict
intermediate = defaultdict(list)

for subdict in dct:
    for key, value in subdict.items():
        intermediate[key].append(value)

# intermediate is now: defaultdict(list, {'a': [2, 1], 'b': [3, 4], 'c': [5]})
最后,通过将每个列表的总和除以每个列表的长度来计算平均值:

for key, value in intermediate.items():
    print(key, sum(value)/len(value))
其中打印:

b 3.5
c 5.0
a 1.5

您可以创建一个中间字典,以列表形式收集所有遇到的值:

dct = [{'a':2, 'b':3}, {'b':4}, {'a':1, 'c':5}]
from collections import defaultdict
intermediate = defaultdict(list)

for subdict in dct:
    for key, value in subdict.items():
        intermediate[key].append(value)

# intermediate is now: defaultdict(list, {'a': [2, 1], 'b': [3, 4], 'c': [5]})
最后,通过将每个列表的总和除以每个列表的长度来计算平均值:

for key, value in intermediate.items():
    print(key, sum(value)/len(value))
其中打印:

b 3.5
c 5.0
a 1.5

您可以使用带有计数器的for循环,然后将每个循环的总和除以计数器

另外,将数组/列表称为dict也很奇怪

我建议这样做:

创建一个新的dict: 字母计数={}

-在当前dicts上进行For循环

-如果该字母不存在,则将其添加到字母计数中

-如果确实存在,则使用项目(+=编号)的值更新该值,并将计数器更新1

-完成for循环后,将每个值除以计数器


-返回新的dict字母\u count

您可以使用带有计数器的for循环,然后将每个循环的总和除以计数器

另外,将数组/列表称为dict也很奇怪

我建议这样做:

创建一个新的dict: 字母计数={}

-在当前dicts上进行For循环

-如果该字母不存在,则将其添加到字母计数中

-如果确实存在,则使用项目(+=编号)的值更新该值,并将计数器更新1

-完成for循环后,将每个值除以计数器


-返回新的dict字母\u count

我想用PyFunctional添加一个唯一的答案

from functional import seq

l = [{'a':2, 'b':3}, {'b':4}, {'a':1, 'c':5}]
a = (seq(l)
     # convert dictionary to list
     .map(lambda d: seq(d).map(lambda k: (k, d[k])))
     .flatten()
     # append 1 for counter
     .map(lambda (k, v): (k, (v, 1)))
     # sum of values, and counts
     .reduce_by_key(lambda a, b: (a[0]+b[0], a[1]+b[1]))
     # average
     .map(lambda (k, (v, c)): (k, float(v)/c))
     # convert to dict
     .to_dict()
)
print(a)
输出

{'a': 1.5, 'c': 5.0, 'b': 3.5}

我想用PyFunctional添加一个独特的答案

from functional import seq

l = [{'a':2, 'b':3}, {'b':4}, {'a':1, 'c':5}]
a = (seq(l)
     # convert dictionary to list
     .map(lambda d: seq(d).map(lambda k: (k, d[k])))
     .flatten()
     # append 1 for counter
     .map(lambda (k, v): (k, (v, 1)))
     # sum of values, and counts
     .reduce_by_key(lambda a, b: (a[0]+b[0], a[1]+b[1]))
     # average
     .map(lambda (k, (v, c)): (k, float(v)/c))
     # convert to dict
     .to_dict()
)
print(a)
输出

{'a': 1.5, 'c': 5.0, 'b': 3.5}

这可以通过以下方式轻松完成:

如果因此需要词典:

>>> dict(df.mean())
{'a': 1.5, 'b': 3.5, 'c': 5.0}

这可以通过以下方式轻松完成:

如果因此需要词典:

>>> dict(df.mean())
{'a': 1.5, 'b': 3.5, 'c': 5.0}

该变量
dict
是词典的
列表。该变量
dict
是词典的
列表。上面是Python2。上面是Python2。