【发布时间】:2016-06-14 19:31:17
【问题描述】:
我想为几个数据列表创建一些基本统计数据并将它们存储在字典中:
>>> from statistics import mean,median
>>> a,b,c=[1,2,3],[4,5,6],[7,8,9]
以下列表推导适用并输出“a”的统计信息:
>>> [eval("{}({})".format(op,a)) for op in ['mean','median','min','max']]
[2, 2, 1, 3]
将列表的变量名称 (a) 分配给另一个对象 (dta) 并在列表推导中评估“dta”也可以:
>>> dta="a"
>>> [eval("{}({})".format(op,eval("dta"))) for op in ['mean','median','min','max']]
[2, 2, 1, 3]
但是,当我尝试在字典理解中将这一切联系在一起时,它不起作用:
>>> {k:[eval("{}({})".format(op,eval("k"))) for op in ['mean','median','min','max']] for k in ['a','b','c']}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <dictcomp>
File "<stdin>", line 1, in <listcomp>
File "<string>", line 1, in <module>
NameError: name 'k' is not defined
我的猜测是 eval 是在理解之前处理的,这就是为什么 'k' 还没有定义?关于如何完成这项工作或完成相同输出的不同例程的任何建议?
【问题讨论】:
-
有趣的问题,但您的代码有效:
{'a': [2.0, 2, 1, 3], 'c': [8.0, 8, 7, 9], 'b': [5.0, 5, 4, 6]} -
你为什么使用 eval ?
-
为什么在这里使用
eval? Python 具有一流的功能:使用它们![stat(a) for stat in [mean, median, min, max]](例如)。 -
啊,我不知道!谢谢:
{k:[op(eval(k)) for op in [mean,median,min,max]] for k in ['a','b','c']}
标签: python dictionary dictionary-comprehension