繁体   English   中英

Python中字典键的逻辑表达式

[英]Logical expression in key of dictionary in Python

作为简化示例,请说我有以下if语句

if x > 5:
    score = 1
else if x <= 5
    score = 2

如何用字典代替它? 我想要类似的东西

score = {x > 5: 1, x <= 5: 2}[x]

我的实际if语句很长,因此我想使用这种压缩结构。

代替字典,您可以使用元组列表,其中一项是函数,另一项是值。 您遍历列表,调用每个函数; 当函数返回真实值时,您将返回相应的值。

def greater_than_5(x):
    return x > 5
def less_or_equal_5(x):
    return x <= 5

scores = [(greater_than_5, 1), (less_or_equal_5, 2)]
for f, val in scores:
    if f(x):
        score = val
        break

使用if-else将是最易读的解决方案。 同时也避免了使用字典表达x > 5时需要无限数量的值的问题(因为它将映射从6开始的所有数字)。

仅当您知道域是有限的(例如x始终小于1000)时,它才有效。 简单的if语句很可能会更快。

要表达范围,可以使用以下简短符号:

if 4 <= x <= 10:
  ...

但是,如果您有一个非常复杂的公式(许多if-else语句)和有限数量的值,则使用预计算表是有意义的。 如果编译器必须在值密集时以类似C的语言转换复杂的switch-case语句,则这也是这样做的。 他们将其实现为查找表。

我仍然建议先将公式编写为if-else语句,然后使用基于if-else代码和可能值范围来计算字典的函数。 要填充字典,请在可能的值范围内进行迭代:

def score(x):
  if x > 5:
    return 1
  elif x <= 5:
    return 2
  ...

d = dict((i,foo(i)) for i in range(1,100))
d[x]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM