2017-03-08 28 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)