python - 带条件调用的字典理解嵌套列表理解

标签 python list-comprehension dictionary-comprehension

我有一个键和列表的字典。我想遍历字典,获取每个列表,遍历每个列表并应用条件,然后将该过滤后的列表附加到新字典。

该功能已经命令式运行。我可以对列表和字典理解在功能上做同样的事情吗?主要的障碍是包装 dict-comp 有一个条件,它需要 list-comp 的长度。

这里是命令式的:

filtered_prediction_dict = {}
for prediction, confidence_intervals in prediction_dict.items():
    filtered_confidence_intervals = []
    for i in confidence_intervals:
        if i > threshold:
            filtered_confidence_intervals.append(i)
    if len(filtered_confidence_intervals) >= 1:
        filtered_prediction_dict[prediction] = filtered_confidence_intervals

我想知道我是否可以通过理解在功能上做同样的事情,像这样:

filtered_prediction_dict = {prediction: [i for i in confidence_intervals if i > threshold] for prediction, confidence_intervals in prediction_dict.items() if len(filtered_confidence_intervals) >= 1}

当然,python 的 linter 指出 filtered_confidence_intervals 尚未在条件中的 len(filtered_confidence_intervals) 中定义。

有什么办法解决这个问题吗?

最佳答案

您可以将应用于每个置信区间的两个条件放在一个语句中。此外,我建议在任何情况下都将置信区间过滤放在列表理解语句中。

两个条件:

  1. 置信区间 > 阈值(if i > threshold)
  2. 一个或多个置信区间大于阈值(len(filtered_confidence_intervals) >= 1)

用一条语句表达:

  • any(ci > confidence_intervals 中 ci 的阈值)

生成的列表理解版本(为了便于阅读而拆分):

{
    p: [ci for ci in cis if ci > threshold]  # only keep ci > threshold
    for p, cis in prediction_dict.items()  # iterate through the items
    if any(ci > threshold for ci in cis)  # only consider items with at least one ci > threshold
}

恕我直言,这并不比 for 循环的可读性差,但我想这是一个品味和使用的问题。


如果你想保持 for 循环:

filtered_prediction_dict = {}
for prediction, confidence_intervals in prediction_dict.items():
    if any(ci > threshold for ci in confidence_intervals):
        filtered_prediction_dict[prediction] = [ci for ci in confidence_intervals if ci > threshold]

您对 python 的 linter 的评论指出 filtered_confidence_intervals 尚未定义:

linter 通常非常准确,这种情况也不异常(exception)。 filtered_confidence_intervals 是为 prediction_dict 中的每个项目定义的,因此您无法遍历 prediction_dict 并测试 filtered_confidence_intervals 的长度

您需要替换语句:

len(filtered_confidence_intervals) >= 1

在列表理解中

len([ci for ci in confidence_intervals if ci > threshold]) >= 1

关于python - 带条件调用的字典理解嵌套列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57801239/

相关文章:

python - 从 scikit-learn 训练 SVC 表明使用 -h 0 可能会更快?

python - 如何将周期间分解为数据框中的多行

python - 在 Python 中用相同的列表减去列表中的列表

Python:将阈值应用于 numpy 数组

Python IDLE 仅在第二台显示器上崩溃。 Tcl/Tk 兼容性问题?

python - 为子域配置 GAE 应用程序 app.yaml

python - 我可以使用生成器表达式来打印字典列表的键、值对吗?

python - 生成器表达式和。列表推导

python - 在这种复杂的情况下如何编写字典理解?

python - 查找字符串中元音的数量