计算python字典的百分比

时间:2017-03-29 04:07:17

标签: python python-2.7 numpy

我想计算字典中值出现的百分比。 d.values/sum(d.values)*100它会出错:unsupported operand type(s) for /: 'list' and 'int'您无法将整个列表与任何整数分开。我想,我在计算时尝试使用d =(Counter([Counter(i)['1'] for i in f.readlines()])),你可以计算百分比,但它不起作用。如果有人有想法,请告诉我。

from collections import Counter
import numpy as np
import matplotlib.pyplot as plt
import pylab as pl
with open("data_binary.txt") as f:
    d=(Counter([Counter(i)['1'] for i in  f.readlines()]))
    print d

    p = d.values()
    X = np.arange(len(d))
    pl.bar(X, p, align='center',width=0.25)
    a = np.array(d.items())
    pl.xticks(X,d.keys())
    a = a[np.argsort(a[:,0])]
    #print a
    ymax=max(d.values())+1
    pl.ylim(0, 70000)
    plt.xlabel ("Number of ones")
    plt.ylabel ("Number of Signatures")
    plt.title("Adder@1")
    pl.show()

4 个答案:

答案 0 :(得分:0)

您可能希望使用len(d.values())来获取项目数,除非我遗漏了某些内容。你能分享一下字典(d)的样子吗? (即打印输出d?)

答案 1 :(得分:0)

你可以使用list comp。

In[2]: my_dict = {key: key for key in range(5)}
In[3]: values = my_dict.values()
In[4]: values
Out[4]: [0, 1, 2, 3, 4]
In[5]: total = sum(values)
In[6]: new = [value * 100. / total for value in values]
In[7]: new
Out[7]: [0.0, 10.0, 20.0, 30.0, 40.0]

或者您可以使用np.array

In[8]: import numpy as np
In[9]: x = np.array([1, 2, 3, 4])
In[10]: x
Out[10]: array([1, 2, 3, 4])
In[11]: x/3.4
Out[11]: array([ 0.29411765,  0.58823529,  0.88235294,  1.17647059])

答案 2 :(得分:0)

对于任何字典d,其值为整数,每个项目所代表的总数百分比可以按如下方式计算和打印:

s = sum(d.values())
for k, v in d.items():
    pct = v * 100.0 / s
    print(k, pct)

numpy对此有点矫枉过正,并且针对数组而不是字典进行了优化。

答案 3 :(得分:-1)

使用numpy

x = np.array(d.values())
print x*100.0/sum(x)