【问题标题】:Create dictionary of statistics for several lists in Python?在 Python 中为多个列表创建统计字典?
【发布时间】: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


【解决方案1】:

不要在内部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]]

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

【讨论】:

  • @MarkDickinson 对。没有任何eval 就更好了。谢谢
【解决方案2】:

尝试在格式化函数中对 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]}

【讨论】:

    猜你喜欢
    • 2020-04-28
    • 2022-06-27
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 2023-02-07
    • 2017-05-05
    相关资源
    最近更新 更多