我正在使用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
答案 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。 我刚刚意识到我误解了什么。