字典中的和值

时间:2016-10-18 19:04:12

标签: python list dictionary sum

我正在使用Excel文件和openpyxl。

以下是样本数据:

Name    Value
Amy1    4
Bob1    5
Bob1    5
Bob2    8
Chris1  7
Chris2  3
Chris3  6
Chris3  6
Chris3  6

使用下面的for循环,我获取与每个唯一名称相关联的值。

for rowNum in range(2, 11):
    person = sheet.cell(row = rowNum, column = 13).value
    people.append(person)
    personValue.update({person: sheet.cell(row = rowNum, column = 26).value})

这会产生一个字典,每个名字都有一个条目(Amy1,Bob1,Bob2等)。

我想合并并对每个匹配名称的值求和,以返回以下结果:

Name  Value
Amy   4
Bob   13
Chris 16

2 个答案:

答案 0 :(得分:0)

您可以使用get()方法为密钥设置默认值,然后以此方式添加。

由于您的所有密钥都采用格式名称#,因此您可以获得所需的最终结果:

mergedResult = dict()

for name in startingDict:
    mergedResult[name[:-1]] = mergedResult.get(name[:-1], 0) + startingDict[name]

这里,get()方法检查结果字典中的键name[:-1](起始字典中没有最终字符的名称)。如果该键不存在,则将其添加默认值0并返回该值。如果该键已存在,则只返回相应的值。然后,您的起始字典中的值将添加到结果字典中的值。

答案 1 :(得分:0)

如果name = sheet.cell(row = rowNum, column = 13).value

value = sheet.cell(row = rowNum, column = 26).value

根据您的评论编辑:

from collections import defaultdict

people = defaultdict(int)
category = defaultdict(int)

for rowNum in range(2, 11):
    # Name with number
    person = sheet.cell(row = rowNum, column = 13).value
    # Name without number
    category_name = ''.join([c for c in person if not c.isdigit()])
    people[person] += sheet.cell(row = rowNum, column = 26).value
    category[category_name] += sheet.cell(row = rowNum, column = 26).value

结果 - 人:

Name    Value
Amy1    4
Bob1    10
Bob2    8
Chris1  7
Chris2  3
Chris3  18

结果 - 类别:

Name    Value
Amy     4
Bob     18
Chris   28

这样可行。

感谢Padraic Cunningham。 我刚刚意识到我误解了什么。