从列表字典中计算平均数,python

时间:2012-12-06 12:00:19

标签: python list dictionary sum average

我的代码我有一个字典,其中有两个列表与zip()函数相结合

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))

哪个工作正常,但我面临的问题是......当我创建一个新字典时,代码在形成一个新字典时从列表name中获取尽可能多的元素,因为在self.sum_1列表。但事实是,它需要前两个(在我的情况下)。这使得输出绝对不正确:

num1   letter
 4.6    9.8

所以我的问题是,我该怎么做才能防止这种情况发生。我尝试了很多东西。甚至试图计算字典中值的总和,但我得到错误

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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):
>>