2016-07-13 28 views
2

我認爲只有在key不在字典中時,.get(key, default=?)函數纔會查看default部分。Python字典獲取函數沒有做正確的事情?

我想要做的是查看我的主字典中是否存在密鑰,如果不存在,請查看它是否存在於備份字典中,並在KeyError不在主要或備份中時引發。

所以,從字面上翻譯上面的英文語句Python中,我寫道:val = mainDict.get(key, backupDict[key])

這樣,如果mainDict沒有key,它會去查backupDict,提高異常,如果它不存在或者,因爲我沒有使用get來查找backupDict

發生了什麼事情,即使在檢查mainDict是否有key或沒有,Python正在提出異常,它不在backupDict。是的,它不在那裏,因爲它在mainDict

這是怎麼發生的?

+1

'GET'只是 「看」 了'default'如果'key'沒有找到,但是默認值是否被'get'看着。 – user2357112

回答

4

在調用之前評估函數調用的參數。當您使用backupDict[key]作爲參數時,必須對其進行評估,以便將結果傳遞給getdefault參數總是評估;它並不總是返回

如果你不想評價它,你可以使用一些替代的表述,如:

mainDict[key] if key in mainDict else backupDict[key] 

這隻會評估一個或另一個。

+0

很高興知道。我認爲'默認'是在需要時進行評估。謝謝! – shikhanshu

2

是的,dict.get函數返回default如果密鑰不在字典中。但default被評估。

您可以使用這樣的中級字典。

main = dict(a=5, c=3) 
backup = dict(a=6, b=9, c=4) 

intermediate = dict(backup, **main) 
print(intermediate['a']) 
print(intermediate['b']) 

你得到:

5 # from the ``main``dict, 
9 # from the ``backup dict``. 

而且具有:

print(intermediate['d']) 

你得到一個異常:

Traceback (most recent call last): 
    File "python", line 9, in <module> 
KeyError: 'd'