字典中是否有函数将值添加到python中的键

时间:2019-04-08 11:18:37

标签: python dictionary

我试图通过一个函数(最好通过一种方法)为多个键添加值。但是到目前为止,我还没有找到想要的方法,也没有找到解决问题的方法。

我知道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个键,我可以对这些键进行硬编码。键的数量可以变化,但是一旦执行代码,就不会添加新的键。

5 个答案:

答案 0 :(得分:2)

collections.Counterupdate方法完全实现了您想要的:

from collections import Counter

...

def split(query):
    total = Counter()
    for item in query.split():
        total.update(process(item))
    return total

Counterdict的子类,因此您可以按原样返回它,也可以将其包装在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}