簡體   English   中英

Python-在字典元素中查找平均值

[英]Python - Find average in dict elements

我的字典像:

dict = [{'a':2, 'b':3}, {'b':4}, {'a':1, 'c':5}]

我需要獲取所有不同鍵的平均值。 結果應如下所示:

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

我可以獲取所有鍵的摘要,但是我無法意識到如何才能對相同的鍵進行計數以獲取平均數。

這可以通過輕松完成:

>>> import pandas
>>> df = pandas.DataFrame([{'a':2, 'b':3}, {'b':4}, {'a':1, 'c':5}])
>>> df.mean()
a    1.5
b    3.5
c    5.0
dtype: float64

如果您需要字典作為結果:

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

您可以創建一個中間字典來收集所有遇到的值作為列表:

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循環用於計數器,然后將每個計數器的總和除以計數器。

您將數組/列表稱為字典也很奇怪...

我建議這樣的事情:

創建一個新的字典:letter_count = {}

-For循環當前字典

-如果字母不存在,則將其添加到字母數中

-如果確實存在,則使用項目的值(+ = number)更新值,並將計數器更新一

-for循環完成后,將每個值除以計數器

-返回新的dict letter_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}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM