對於可變類型,如列表,而是採用if else
,我們可以處理丟失的關鍵問題是這樣的:處理缺失與數字類型鍵在Python
dic = {'key1':[1, 2], 'key2':[1]}
dic.setdefault('key3', []).append(1)
這隻能檢查dic
'key3'
只有一次。
但對於不可改變的類型,比如整數,我們不能用setdefault()
這樣的:
dic = {'key1':3, 'key2':5}
dic.setdefault('key3', 0) += 1
由於setdefault()
將返回整數0
而不是可變dic['key3']
我不知道該如何處理與它優雅,例如我能做的最好的是這樣的:
dic = {'key1':3, 'key2':5}
dic['key3'] = 1 if 'key3' not in dic else dic['key3'] + 1
但是如果'key3'
存在,此代碼會檢查'key3'
兩次dic
,並使用額外內存dic['key3'] + 1
。
有什麼建議嗎?
使用['collections.defaultdict(int)'](https://docs.python.org/3/library/collections.html#defaultdict-objects)?請注意,這實際上是關於可變性與不可變性的 - 「元組」仍然可迭代,但會遇到與整數相同的問題。再次檢查dic'中的''key3'是否真的不是什麼大問題;由於它是一個散列表(請參閱[這篇經典的PyCon討論](https://www.youtube.com/watch?v=C4Kc8xzcA68)以獲取更多信息),字典中的鍵查找是'O(1)'。 – jonrsharpe
非常感謝您的回覆! –