2017-03-08 30 views
0

从一个文件中的多个值,我有一个文件“的test.txt”看起来喜欢:如何计算在python

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'] 

所以我不能summ的价值在一起。 在此先感谢

+1

只使用一个号码作为值,你为什么要使用一个列表?只需要输入号码,不断添加即可。首先转换为int。 – pvg

回答

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

+0

由* Counter *替换* defaultdict *稍微好一些,因为* d *的初始化不需要参数,名称非常清晰,整数被处理。 – guidot

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)