使用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(?)
答案 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])))
前者更具可读性。