[英]Is there a function in dict to add values to a key in python
我試圖通過一個函數,最好是通過一種方法,為多個鍵添加值。 但是到目前為止,我還沒有找到想要的方法,也沒有找到解決問題的方法。
我知道d.update()
僅用於更新值,但是僅覆蓋舊結果,而我想將值添加到鍵中。
以下是我正在處理的代碼:
def split(query):
query = query.split()
total = dict()
for item in query:
total.update(process(item)) # <-- I want to modify this bit
print(total)
process(item)
返回帶有一些鍵和值的dict
。
例如:
process(item)
可能返回如下內容:
{
"Tim": 12.5,
"Brad": 15,
"Amy": 10
}
對於第二次迭代,它可能會返回:
{
"Tim": 3,
"Brad": 7,
"Amy": 8
}
現在, total
將成為第二次迭代。 但是,我希望它將值添加到名稱中,以便新列表為:
total = {
"Tim": 15.5,
"Brad": 22,
"Amy": 18
}
如果只有3個鍵,我可以對這些鍵進行硬編碼。 鍵的數量可以變化,但是一旦執行代碼,就不會添加新的鍵。
類collections.Counter
的update
方法完全實現了您想要的:
from collections import Counter
...
def split(query):
total = Counter()
for item in query.split():
total.update(process(item))
return total
Counter
是dict
的子類,因此您可以原樣返回它,也可以在返回之前將其包裝在dict
。 無論哪種方式, update
方法都會將所有匹配鍵的值加在一起。 值可以是任何類型,只要映射中已經存在的內容以及您為給定鍵傳遞的內容支持它們之間的+
運算符。
如果只想使用內置函數(不導入),最好的選擇是使用dict.get
來添加可能還不存在的值:
def split(query):
total = {}
for item in query.split():
for k, v in process(item).items():
total[k] = total.get(k, 0) + v
return total
您可以像這樣通過字典編寫循環:
for key, value in dic.iteritems():
並為字典添加新值。
您可以編寫如下函數:
def update(d1, d2):
result = dict()
for key1, value1 in d1.iteritems():
for key2, value2 in d2.iteritems():
if key1 == key2:
result[key1] = str( int(value1) + int(value2) )
return result
並像這樣使用它:
new_dict = update(d1, d2)
遍歷d2
,檢查其elem
是否在d1
,對於每個elem
,將值添加到d2
,然后將其包裝在可以隨時調用的方法中:
def add_values(d1, d2):
for elem in d2:
if elem in d1:
d2[elem] = float(d2[elem]) + float(d1[elem])
return {**d1, **d2}
d1 = {
"Tim": "12.5",
"Brad": "15",
"Amy": 10
}
d2 = {
"Tim": "3",
"Brad": "7",
"Amy": "8"
}
print(add_values(d1, d2))
輸出 :
{'Tim': 15.5, 'Brad': 22.0, 'Amy': 18.0}
您可以嘗試以下方法:
for key, value in item.items():
if key in total:
total[key] += value
else:
total[key] = value
一個簡單的嵌套for循環應該足以滿足您的需求。 然后可以使用以下方法將其打包:
for key in total:
if key in new_values:
total[key] += new_values[key]
輸出:
{'Amy': 18, 'Brad': 22, 'Tim': 15.5}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.