我的代码我有一个字典,其中有两个列表与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.name
和self.sum_1
列表的新词典
self.nov_slovar = OrderedDict(zip(self.ime, self.seznam_vsot))
哪个工作正常,但我面临的问题是......当我创建一个新字典时,代码在形成一个新字典时从列表name
中获取尽可能多的元素,因为在self.sum_1
列表。但事实是,它需要前两个(在我的情况下)。这使得输出绝对不正确:
num1 letter
4.6 9.8
所以我的问题是,我该怎么做才能防止这种情况发生。我尝试了很多东西。甚至试图计算字典中值的总和,但我得到错误
答案 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):
>>