Finding mean of a values in a dictionary without using .values() etc

前端 未结 10 1301
挽巷
挽巷 2021-01-02 17:29

I have a dictionary that looks like:

G={\'E\': 18.0, \'D\': 17.0, \'C\': 19.0, \'B\': 15.0, \'A\': 0}

I have to find the mean of the values

相关标签:
10条回答
  • 2021-01-02 17:41
    import numpy as np
    np.mean(list(dict.values()))
    
    0 讨论(0)
  • 2021-01-02 17:44

    If you use numpy:

    import numpy as np
    
    np.array(list(dict.values())).mean()
    
    0 讨论(0)
  • 2021-01-02 17:45

    In Python 3.4 upwards there is a very clear way:

    import statistics
    numbers = [G[key] for key in G]
    mean_ = statistics.mean(numbers)
    
    0 讨论(0)
  • 2021-01-02 17:46

    To do this with a "simple for loop", using your constraints against using the dict methods:

    G = {'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}
    
    
    count = 0
    _sum = 0
    for key in G:
        count += 1
        _sum += G[key]
    
    print('this is the mean: ', _sum/count)
    

    If you're supposed to avoid dict methods, clearly this is an academic exercise.

    Without that constraint:

    The statistics module in the standard library has a mean method, which would be my first thought (as the standard library does not require third party packages.):

    >>> G={'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}
    >>> from statistics import mean
    >>> mean(G[k] for k in G)
    13.8
    

    Third party packages like numpy and pandas have objects with a mean method:

    >>> from numpy import array
    >>> array([G[k] for k in G]).mean()
    13.8
    
    >>> from pandas import Series
    >>> Series([G[k] for k in G]).mean()
    13.8
    

    If we allow ourselves to use the values() method, this gets a little simpler with iterable unpacking. For some reason the other answers violate that condition, so I figure I should show the more efficient way of doing it:

    >>> Series([*G.values()]).mean()
    13.8
    
    0 讨论(0)
  • 2021-01-02 17:48

    Another for-loop, this one not needing a counter for items.

    G = {'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}
    
    sum = 0
    for k in G:
        sum += float(G[k])
    
    print "Mean: " + str(sum/len(G))
    

    Results to:

    Mean: 13.8
    [Finished in 0.3s]
    

    Actually, given your data, there's no need to use float. On my end, removing float and just leaving sum += G[k] still outputs the same since the values are not strings anyway.

    0 讨论(0)
  • 2021-01-02 17:51

    Iteration over a dictionary iterates over its keys. Try just using for key in G, and then using G[key] appropriately instead of values.

    Alternatively, use the iteritems() method of the dictionary to get key, value pairs from G, i.e.:

    d=[float(sum(values)) / len(values) for key, values in G.iteritems()]
    

    (For the record, your actual method of computing a mean doesn't look right to me, but you may as well fix the iteration problem first).

    0 讨论(0)
提交回复
热议问题