我正在一個簡單的映射問題,即我有其中其值落在給定範圍內的值,並且在該範圍確定相關聯的標籤。這是一個典型的if/else問題,但我想知道是否可以使用字典來完成映射,將lambda放在關鍵端。Python的開關功能的變體:鍵lambda函數
mapping = {
lambda x: x >=1 and x <= 3590:'management',
lambda x: x >= 3600 and x <= 4690: 'service',
lambda x: x >= 4700 and x <= 5990: 'sales',
lambda x: x >= 6000 and x <= 7690: 'natl recs/constr/maint',
lambda x: x >= 7700 and x <= 9790: 'product/transp',
lambda x: x >= 9800 and x <= 9830: 'milit'
}
但是mapping[2]
,例如,返回一個關鍵錯誤,所以看起來這不是猶太教。這一系列if/else語句是否是最佳途徑?
更新:
下面的版本比上面的版本更簡單,更簡潔。
def mapping(x):
if x >=1 and x <= 3590: y= 'management'
if x >= 3600 and x <= 4690: y= 'service'
if x >= 4700 and x <= 5990: y= 'sales'
if x >= 6000 and x <= 7690: y= 'natl recs/constr/maint'
if x >= 7700 and x <= 9790: y= 'product/transp'
if x >= 9800 and x <= 9830: y= 'milit'
return y
mapping(5556)
?如果9800 <= x <= 9830'與你當前的if check相同, – 2014-10-01 19:29:33
請記住,在Python中你可以做'如果1 <= x <= 3590'。我同意第二個問題比較簡單,這裏還有一個問題要問嗎? – Korem 2014-10-01 19:29:47
你可以通過繼承'dict'並定義一個新的'__getitem__'來達到你想要的效果,但它並不完美。如果時間允許,我會寫點東西 – 2014-10-01 19:34:54