为 Python 中的多个列表创建统计词典?

Create dictionary of statistics for several lists in Python?

我想为几个数据列表创建一些基本统计信息并将它们存储在字典中:

>>> 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 在 comprehension 之前处理,这就是为什么 'k' 还没有定义?关于如何完成这项工作或完成相同输出的不同例程的任何建议?

不要引用内部 eval:

中的 k
{k:[eval("{}({})".format(op,eval(k))) for op in ['mean','median','min','max']] for k in ['a','b','c']}
                                 ^

或完全删除 eval

[[mean(k), median(k), min(k), max(k)] for k in [a, b, c]]

您可以使用按键做一个简单的解决方法,将其更改为字典理解。

尝试在 format 函数中调用 eval 时删除 k 两边的引号。

我运行以下命令:

> from statistics import mean,median
> a,b,c=[1,2,3],[4,5,6],[7,8,9]
> {k:[eval("{}({})".format(op,eval(k))) for op in ['mean','median','min','max']] for k in ['a','b','c']}

并得到以下输出:

{'a': [2.0, 2, 1, 3], 'c': [8.0, 8, 7, 9], 'b': [5.0, 5, 4, 6]}