[英]Calculate the percentage for python dictionary
我想計算字典中出現值的百分比。 d.values/sum(d.values)*100
它給出錯誤:/的unsupported operand type(s) for /: 'list' and 'int'
您無法將整個列表除以任何整數。 我認為,在=(Counter([Counter(i)['1'] for i in f.readlines()]))
我嘗試使用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()
您可能要使用len(d.values())來獲取項目數,除非我遺漏了一些東西。 您能分享一下字典(d)的樣子嗎? (即輸出d的輸出?)
您可以使用列表補償。
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])
對於任何值為整數的字典d,可以按以下方式計算和打印每個項目所代表的總數的百分比:
s = sum(d.values())
for k, v in d.items():
pct = v * 100.0 / s
print(k, pct)
numpy對此過於矯kill過正,並且針對數組而不是字典進行了優化。
使用numpy
x = np.array(d.values())
print x*100.0/sum(x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.