如何计算python中文件的多个值

时间:2017-03-08 12:21:02

标签: python dictionary sum

我有一个文件'test.txt',看起来像:

emma 5
peter 9
emma 2
peter 10
peter 7
aps 25
emma 1

然后我应该以某种方式用相同的键来汇总值,所以答案是:

aps 25
emma 8
peter 26

我设法写了一个代码

d = {}
with open('game.txt') as f:
    for line in f:
       (key, val) = line.split()
       if key in d:
           d[key].append(val)

       else:
           d[key] = [val]
for x, v in d.items():
    print (x,v)

但它给了我:

aps ['25']
peter ['9', '10', '7']
emma ['5', '2', '1']

因此我无法将这些值汇总在一起。 提前致谢

2 个答案:

答案 0 :(得分:1)

  1. 您无法对这些值求和,因为它们是字符串。如果将它们转换为整数,您将能够对它们求和:

    for x, v in d.items():
        print(x, sum(int(val) for val in v))
    
  2. 您可以使用defaultdict

    来缩短代码
    from collections import defaultdict
    
    d = defaultdict(int)
    
    with open('game.txt') as f:
        for line in f:
           key, val = line.split()
           d[key] += int(val)
    
    for x, v in d.items():
        print (x, v)
    

    使用defaultdict(int),您无需检查字典中是否已存在密钥。如果它不存在,它将被添加并被赋予0的值。

答案 1 :(得分:0)

您可以直接创建常规词典,如下所示:

d = {}
with open('game.txt') as f:
    for line in f:
        name, value = line.split()
        d[name] = d.get(name, 0) + int(value)

for x, v in d.items():
    print (x, v)