我必须计算字典值列表的平均值:
d={('a'):['-','-',3.2],
('b'):[4.8,6.7],
('c'):['-'],
('d'):[6.7,'-',9.8,'-']}
我想:
d={('a'):[3.2],
('b'):[5.75],
('c'):['-'],
('d'):[8.25]}
这是我使用的代码:
avgd={}
for key, v in d.iteritems():
try:
avgd[key]=sum(v)/(len(v))
except TypeError:
avgd[key]='-'
但我只得到其列表的平均值仅由数字组成。 我该如何避免这个问题?
答案 0 :(得分:0)
这是一种方法。我使用列表推导仅获取 <script src="<?php echo get_template_directory_uri(); ?>/_js/libs/picturefill.js" async="true"></script>
的相关项。
v
答案 1 :(得分:0)
d={('a'):['-','-',3.2],
('b'):[4.8,6.7],
('c'):['-'],
('d'):[6.7,'-',9.8,'-']}
avgd = {}
for key, values in d.iteritems():
numeric = [float(i) for i in values if isinstance(i,(int,float))]
avgd[key] = [sum(numeric)/len(numeric)] if numeric else values
# avgd == {'a': [3.2], 'c': ['-'], 'b': [5.75], 'd': [8.25]}
答案 2 :(得分:0)
跳过而不是炸毁。
{k:('-' if all(e == '-' for e in v) else
(sum(e for e in v if e != '-') / (sum(1 for e in v if e != '-')) or 1))
for k, v in d.iteritems()}
优化留给读者练习。