2013-06-03 42 views
1

什麼是「pythonic」方法來檢查提取前是否在字典中,並在比較中使用它?提取前的詞典鍵[Pythonic方法]

例如:

目前,我做

if "key1" in list2 and list2["key1"]=="5": 
    print "correct" 

,這樣就會對第一個條件短路,如果它失敗。但是,這導致了很長的條件陳述。

是否有更多的「pythonic」方法?我猜測,在try catch中包裝條件是一個更糟糕的主意。

回答

6

這種方法完全是pythonic。另外,略有不同的是

if list2.get("key1", <-1,0 or any sensible default, e.g. None>) == 5: 
    print "correct" 

用這種方法你僱用dict.get方法,它允許從字典中值安全開採(並提供了一種指定默認值)

4
if list2.get("key1")==5: 
    print("correct") 

雖然,我不會調用字典「list2」。

如果該值可以是無,您可以選擇另一種默認:

if list2.get("key1", object()) in my_other_list: 
    print("correct") 

或使用異常,或者你的「長」的方式。

+2

如果值不是整數 - 期望另一個例外... –

+0

測試兩個不相容的類型的相等性應該只計算爲False,不會引發異常。 – chepner

+1

您仍然可以比較非整數與整數的等式。 – BrenBarn

7

都能跟得上 - 嘗試/除非絕對精細:

try: 
    if list2['key1'] == '5': 
     # do something 
except KeyError: 
    # key wasn't found 
except ValueError: 
    # most likely value wasn't comparable... 
+0

'TypeError'不會如果您比較無與倫比的平等類型,則會提出。 – chepner

+0

@chepner金髮時刻 - 謝謝 –

+0

我覺得這很醜。沒問題,它很健壯,但很醜陋。 – Elazar

0

在我看來,最Python的方式把這將是

print 'correct' if list2.get('key1') == 5 
+1

不,這是最紅寶石般的方式。 – Elazar

+0

顯然我對ruby沒有太多的想法。謝謝@Elazar。 – Abhinav

+0

如果是這樣的話,ruby已經這麼做了。 – Elazar