我试图通过一个函数(最好通过一种方法)为多个键添加值。但是到目前为止,我还没有找到想要的方法,也没有找到解决问题的方法。
我知道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个键,我可以对这些键进行硬编码。键的数量可以变化,但是一旦执行代码,就不会添加新的键。
答案 0 :(得分:2)
类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
答案 1 :(得分:0)
您可以像这样通过字典编写循环:
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)
答案 2 :(得分:0)
遍历d2
,检查其任何elem
是否在d1
中,对于每个变量,将值添加到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}
答案 3 :(得分:0)
您可以尝试以下方法吗?
<div class="performance-box-name-in-circle">
<span>LM</span>
</div>
答案 4 :(得分:0)
一个简单的嵌套for循环应该足以满足您的需求。然后,您可以使用以下方法将其打包:
for key in total:
if key in new_values:
total[key] += new_values[key]
这将输出:
{'Amy': 18, 'Brad': 22, 'Tim': 15.5}