2017-02-18 49 views

回答

20

您的語法無效,您也不需要致電d.keys()

if key not in d: 
    d[key] = value 

就夠了。沒有更清晰,更可讀的方法。

您可以用dict.get()再次更新,這將返回現有值,如果鍵已經存在:

d[key] = d.get(key, value) 

,但我強烈反對這一點;這是代碼打高爾夫球,妨礙維護和可讀性。

8

使用dict.setdefault()

>>> d = {1: 'one'} 
>>> d.setdefault(1, '1') 
'one' 
>>> d # d has not changed because the key already existed 
{1: 'one'} 
>>> d.setdefault(2, 'two') 
'two' 
>>> d 
{1: 'one', 2: 'two'} 
+2

'dict.setdefault()'真的應該只嘗試過訪問值時使用。 –

+2

@MartijnPieters:爲什麼那麼重要?名字'setdefault()'清楚地描述發生了什麼 - 它也返回一個值並不重要,而且有點古怪的IMO。你能提供一個快速的解釋,或者是一個鏈接,爲什麼這是不可取的? – mhawke

+1

您可以在需要存在值的表達式中使用它,例如在分組循環中:'對於iterable中的obj:d.setdefault(key_for_obj(obj),[])。append(obj)'。沒有什麼古怪的價值被返回,*這是方法的全部重點*。 –

相關問題