簡體   English   中英

計算Python字典的百分比

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM