如何计算由列表组成的字典值的平均值?

时间:2015-07-31 16:52:05

标签: python list dictionary average

我必须计算字典值列表的平均值:

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]='-'

但我只得到其列表的平均值仅由数字组成。 我该如何避免这个问题?

3 个答案:

答案 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()}

优化留给读者练习。