Python 2.7.9:字典列表,计算均值和标准

时间:2015-05-09 21:59:13

标签: python list dictionary std mean

使用Python 2.7.9:我有一个包含“数据”项的词典列表,如何将每个项目访问到列表中,以便获得均值和标准差?这是一个例子:

values = [{'colour': 'b.-', 'data': 12.3}, {'colour': 'b.-', 'data': 11.2}, {'colour': 'b.-', 'data': 9.21}]

到目前为止,我有:

val = []
for each in values:
    val.append(each.items()[1][1])
print np.mean(val) # gives 10.903
print np.std(val)  # gives 1.278

原油而非Pythonic(?)

4 个答案:

答案 0 :(得分:0)

使用列表理解可能是最简单的。你可以提取这样的数字:

numbers = [x['data'] for x in values]

然后你只需要调用numpys mean / std / etc函数,就像你正在做的那样。

答案 1 :(得分:0)

为(或许)一个不必要的问题道歉,我已经看到了这个:

average list of dictionaries in python

vals = [i['data'] for i in values]
np.mean(vals) # gives 10.903 
np.std(vals)  # gives 1.278

(Pythonic solution?)

答案 2 :(得分:0)

索引字典是一个非常糟糕的主意,因为它无法保证订单。有时'data'元素可能是第一个,有时它可能是第二个。没有检查就没有办法知道。

使用字典时,您应该几乎总是使用密钥访问元素。在字典表示法中,这是{ key:value, ... },其中每个键都是“唯一的”。我不记得python词典键的“唯一”的确切定义,但它相信它是你的对象或文字的(类型,哈希)对。

记住这一点,我们有更多的pythonic:

val = []
for data_dict in values:
  val.append(data_dict['data'])

如果你想要花哨,你可以使用列表完成,这是一种从更复杂的语句生成列表的奇特方式。

val = [data_dict['data'] for data_dict in values]

为了更加花哨,您可以添加一些条件,以便检查错误。

val = [data_dict['data'] for data_dict in values if (data_dict and 'data' in data_dict)]

这种最奇特的做事方式是使用for data_dict in values过滤if (data_dict and 'data' in data_dict)次迭代的结果,以便data_dict中使用的唯一data_dict['data']个实例是那些通过if-check的人。

答案 3 :(得分:0)

你想要一个pythonic one Liner?

$form->get('employees')->getData() 

你可以使用一个班轮

data = [k['data'] for k in values]
print("Mean:\t"+ str(np.mean(data)) + "\nstd :\t" + str(np.std(data)))

但确实没有意义,因为两者都打印

print("Mean:\t"+ str(np.mean([k['data'] for k in values])) + "\nstd :\t" + str(np.std([k['data'] for k in values])))

前者更具可读性。