我想计算字典中值出现的百分比。 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()
答案 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)