我正在尋找一個「更新和插入」操作的字典,有一個共同的工作:對於列表中給定的鍵,每個鍵更新字典中的值。但如果該鍵不字典存在,插入一個默認值到字典然後更新,如:python字典添加和修改操作
for k in list:
dict[k] += 2
如果k不是字典的鍵,請dict[k] = 0
和dict[k] += 2
像C++的std ::地圖
有沒有簡單的方法?我不想寫一個if-else
我正在尋找一個「更新和插入」操作的字典,有一個共同的工作:對於列表中給定的鍵,每個鍵更新字典中的值。但如果該鍵不字典存在,插入一個默認值到字典然後更新,如:python字典添加和修改操作
for k in list:
dict[k] += 2
如果k不是字典的鍵,請dict[k] = 0
和dict[k] += 2
像C++的std ::地圖
有沒有簡單的方法?我不想寫一個if-else
幾個方法:
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
;這些名稱會影響內置類型)
dict[k]=dict.get(k,0)+=2
你是怎麼做到的。
當你
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]
,它將更新/創建一個新的密鑰。
from collections import defaultdict
d = defaultdict(int)
d['whatever'] += 2
那麼,你的問題是以'if-else'方式陳述的,所以**不,你不能使用'if-else'。** –
是怎麼回事?我的解決方案沒有'if-else' – 1478963