【问题标题】:Python - Find average in dict elementsPython - 在 dict 元素中查找平均值
【发布时间】:2016-12-08 00:31:44
【问题描述】:

我有这样的字典:

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

我需要获取所有不同键的平均值。结果应如下所示:

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

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

【问题讨论】:

  • 那个变量dict 是字典的list

标签: python dictionary average


【解决方案1】:

这可以通过轻松完成:

>>> 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}

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      【解决方案3】:

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

      你将数组/列表称为字典也很奇怪......

      我建议这样:

      创建一个新的字典: letter_count = {}

      -For 循环遍历当前的字典

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

      -如果确实存在,则用项目的值(+=数字)更新值,并将计数器更新一

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

      -返回新的dict letter_count

      【讨论】:

        【解决方案4】:

        我想用 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}
        

        【讨论】:

        • 以上是针对Python2的。
        猜你喜欢
        • 2014-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 2014-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多