2017-08-21 11 views
1
1st Text file format . 
cake,60 
cake,30 
tart,50 
bread,89 

2nd Text file format . 
cake,10 
cake,10 
tart,10 
bread,10 

コード私は試しました。キー値を置き換えるのではなく、どのように追加しますか? Python辞書

from collections import defaultdict 
answer = defaultdict(int) 
recordNum = int(input("Which txt files do you want to read from ")) 
count = 1 
counter = 0 
counst = 1 
countesr = 0 
while recordNum > counter: 
    with open('txt'+str(count)+'.txt', 'r') as f: 
     for line in f: 
      k, v = line.strip().split(',') 
      answer[k.strip()] += int(v.strip()) 
      count = count+1 
      counter = counter+1 
print(answer) 

問題です。

I want the dictionary to be {'cake': '100', 'tart': '60', 'bread': '99'} 

but it prints like this {'cake': '30', 'tart': '50', 'bread': '89'} 

"cake"値の代わりに、txtファイルの1と2の他のケーキ値を加えて、最新の値に置き換えます。どうすればこの問題を解決できますか?

答えて

2

あなたはcollections.defaultdictを使用してカウントを蓄積することができます

from collections import defaultdict 

answer = defaultdict(int) 
with open("file.txt", 'r') as f: 
    for line in f: 
     k, v = line.split(',') 
     answer[k.strip()] += int(v.strip()) 

# turn values back to string 
for k in answer: 
    answer[k] = str(answer[k]) 
print(answer) 

数はすべて正である場合は、あなたの代わりにcollections.Counterを考慮することができます。

1

あなたができることの一つの楽しみの事はCounter Sを一緒に追加している:

import csv 
from collections import Counter 

with open('file.txt', 'r') as f: 
    reader = csv.reader(f) 
    answer = sum((Counter({k: int(count)}) for k, count in reader), Counter()) 

print(answer)