2014-05-15 78 views
0

我正在尋找一個「更新和插入」操作的字典,有一個共同的工作:對於列表中給定的鍵,每個鍵更新字典中的值。但如果該鍵不字典存在,插入一個默認值到字典然後更新,如:python字典添加和修改操作

for k in list: 
    dict[k] += 2 

如果k不是字典的鍵,請dict[k] = 0dict[k] += 2像C++的std ::地圖

有沒有簡單的方法?我不想寫一個if-else

+0

那麼,你的問題是以'if-else'方式陳述的,所以**不,你不能使用'if-else'。** –

+0

是怎麼回事?我的解決方案沒有'if-else' – 1478963

回答

2

幾個方法:

dict.get

for k in li: 
    d[k] = d.get(k,0) + 2 

setdefault

for k in li: 
    d[k] = d.setdefault(k,0) + 2 

你會發現,這基本上等同於get語法。兩者之間的區別是調用setdefault實際上創建默認值,如果它不存在,所以你可以寫交替:

for k in li: 
    d.setdefault(k,0) 
    d[k] += 2 

使用defaultdict

from collections import defaultdict 
d = defaultdict(int) 

for k in list: 
    d[k] += 2 

(不要將您的名單列爲list,請勿將您的字典命名爲dict;這些名稱會影響內置類型)

0
dict[k]=dict.get(k,0)+=2 

你是怎麼做到的。

1

當你

dict[k] += 2 

這意味着

dict[k] = dict[k] + 2 

所以,巨蟒試圖獲取關鍵k值並沒有找到一個。所以它失敗了。但是我們可以使用dict.get,當沒有找到密鑰時它將返回默認值。它可以這樣使用

for k in my_list: 
    d[k] = d.get(k, 0) + 2 

在這裏,我們要求字典對象返回0,如果找不到密鑰。然後我們將右手錶達式的值賦給d[k],它將更新/創建一個新的密鑰。

1
from collections import defaultdict 
d = defaultdict(int) 
d['whatever'] += 2