-1

我的代码我有一个字典,其中有两个列表与 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

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

4

2 回答 2

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
于 2012-12-06T12:32:25.347 回答
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):
>>
于 2012-12-06T12:34:55.800 回答