2012-12-06 113 views
-1

我我的代碼,我有兩個列表拉鍊()函數結合的字典從列表的字典計算平均數,蟒蛇

self.dict = OrderedDict(zip(self.name,self.unit)) 

清單將作爲參數... var=class([[1,2,4,7],["y","y","t"],[11.1,12.3,6]],name=["num1","letter","num2"])

在一個點上應該有一個函數來檢查每個括號中的項目是否只有數字。例如int=[1,2,3] 如果這是真的,程序將計算每個數字唯一列表的平均值。並打印出值num1 = 3.5 num2 = 9.8(如表):

num1 num2 
3.5 9.8 

首先,我用這個做一個新的列表:

for i in range(len(self.unit)): 
        if all(isinstance(item, (int,float)) for item in self.unit[i]): 
         self.new_l.append(self.unit[i]) 

之後,我(在其他功能)創建一個名爲self.sum_l新名單其中將每個號碼列表的平均值放入新列表的列表中(在這個例子中,我得到兩個平均值)。

self.sum_l.append([sum(self.new_1[i])/float(len(self.new_1[i]))]) 

之後,我做它使用self.nameself.sum_1名單

self.nov_slovar = OrderedDict(zip(self.ime, self.seznam_vsot)) 

的正常工作一個新的字典,但我面臨的問題是什麼?當我創建一個新的字典由於self.sum_1列表中有列表,所以在形成新的字典時,代碼會從列表name中取出儘可能多的元素。但事情是,它需要前兩(在我的情況)。這使得輸出絕對不正確:

num1 letter 
4.6 9.8 

所以我的問題是,我應該怎麼做,以防止發生。我嘗試了很多東西。甚至試圖計算在字典中值的總和,但我得到的錯誤

+0

我剛剛失去了你對不起,什麼是'4.6'? '(1 + 2 + 4 + 7)/ 4 = 3.5'是它的預期結果還是你得到的錯誤? – zenpoy

+0

這是一個例子,我用頭計算(錯誤地:P)。那不是重點。問題是,我想計算僅包含浮點或整數(或兩者)的列表的平均值(每個列表)。 我的方法在顯示正確名稱時出現問題。 – user1509923

+0

它有多少碼?你可以做一個獨立的例子來展示問題,以便我們看到整個事情嗎? – Evert

回答

1
from __future__ import division 

self.nov_slovar = {} 
for key, value in self.dict.iteritems(): 
    try: 
     self.nov_slovar[key] = sum(value)/len(value) 
    except TypeError: # can't sum non-numbers; skip those 
     pass 
+0

這可以很好地工作,但是當使用這個: ''= row = zip(*([key] + map ** TypeError:*之後的參數*必須是一個序列,而不是生成器** – user1509923

+0

不知道爲什麼要這樣做,但無論如何:-)。我的猜測是你正在使用Python 3,'map'返回一個生成器,而不是一個序列。這很容易通過做'zip(*([key] + list(map(str,value))...')來解決:':使用'list()'將把發生器的輸出轉換成一個列表 – Evert

+0

嗯,使用py 2.7 .3,和我得到相同的錯誤。 – user1509923

1

它的東西很長的問題很簡單,我不知道我得到了正確的問題,但是這可能表現出有幾件事可能會有所幫助......

import numbers 

a = {"title": "num1", "values": [1,2,3,4,5]} 
b = {"title": "letter", "values": [1,'b',3,4,5]} 

def print_avg(r): 
    if all(isinstance(x, numbers.Number) for x in r["values"]): 
     print a["title"],":", sum(r["values"])/float(len(r["values"])) 

print_avg(a) 
>> num1 : 3.0 
print_avg(b): 
>>