【问题标题】:Dictionary comprehension with elif in Python?在 Python 中使用 elif 进行字典理解?
【发布时间】:2017-08-17 19:06:44
【问题描述】:

我正在创建一个需要内部条件的字典。所以在这里,我有一个arr_temp 持有一些值,我想根据arr_temp 中的元素设置paired_vals(现在仅适用于一种情况)。 我尝试了if 语句,但遇到了我无法在理解中使用elif 的错误。现在我只是在任何地方添加paired_vals_mass,但这不适合我的情况,因为我有几个值可以补充arr_temp 中的每个元素。 任何人都可以提出一个实现它的好方法吗?

report['conditions'][condname] = 
{findings: [{'name': x, 'parameters': paired_vals_mass} for x in arr_temp]}

【问题讨论】:

  • 你可以嵌套 if/else 语句,但会弄乱你的代码
  • 你能告诉我们你尝试失败的代码吗?目前尚不清楚此条件是什么,以及您希望如何在代码中使用它——因此,不可能给出简明的答案。
  • 您可以在 dict-comprehension(或任何其他理解)内实现 if-else 条件但不能实现 elif。如果你需要,最好放弃dict-comprehension
  • @Ev.Kounis 所以唯一的办法就是避免 dict-comprehension?
  • 请向我们展示一些输入和输出示例。

标签: python


【解决方案1】:

这就是在理解中实现elif 的方式:

a = {x: 'negative' if x < 0 else 'positive' if x > 0 else 'zero' for x in range(-2, 2)}
print(a)  # {0: 'zero', 1: 'positive', -1: 'negative', -2: 'negative'}

如您所见,没有elif,而是嵌套的if。即使在这种简单的情况下,代码的可读性也会降低。

更好的选择是 选择器 function 像这样:

def selector(x):
    if x < 0:
        return 'negative'
    elif x == 0:
        return 'zero'
    else:
        return 'positive'

a = {x: selector(x) for x in range(-2, 2)}
print(a)  # {0: 'zero', 1: 'positive', -1: 'negative', -2: 'negative'}

【讨论】:

  • FWIW,将这一点取出到函数中可能更干净。那么你就不需要 for 循环了。
【解决方案2】:

听起来你需要一个构造字典的函数:

def construct_dict(x, paired_vals_mass):
    ret = {'name': x}
    if x .... :
        ret['parameters'] = ...
    elif x .... :
        ret['parameters'] = ...
    else:
        ret['parameters'] = ...

    return ret

report['conditions'][condname] = 
    {findings: [construct_dict(x, paired_vals_mass) for x in arr_temp]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2021-06-02
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多