簡體   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