我有这个。txt文件的例子。名字:钱
Muumimamma:3.3
Pikku Myy:1.3
Muumimamma:2.9
Niiskuneiti:2.2
Muumimamma:8.9
Muumipappa:3.9
Niiskuneiti:3.8
Muumipeikko:2.2
Muumimamma:1.3
Niiskuneiti:2.0
Muumipeikko:3.2
Muumimamma:5.0
我想让字典的名字是关键和钱是值,如果有不止一次在文件中的钱应该加在一起。所以最终的字典应该是这样的:
{'Muumipappa': 3.9, 'Pikku Myy': 1.3, 'Niiskuneiti': 8.0, 'Muumipeikko': 5.4, 'Muumimamma': 21.4}
谢谢!
collections.Counter
按您想要的方式求和:
from collections import Counter
with open('/tmp/myfile.txt') as f:
d = sum((Counter({k: float(v) for k, v in [line.split(':')]}) for line in f), Counter())
d = dict(d)
注意,计数器实例已经是dict的子类,因此d = dict(d)
行可能并不需要,这取决于您的用例。
使用collections
中的defaultdict
与float
(文档中有int
的示例)
from collections import defaultdict
import re
d = defaultdict(float)
with open("money.txt", "r") as f:
for line in f:
name, money = re.split(":",line[:-1])
d[name] += float(money)
所以我们不允许使用import。我想到了这个主意,你觉得怎么样?
testi = open(file, "r")
lista = testi.readlines()
testi.close()
dict = {}
for arvo in lista:
arvo = arvo.strip()
type = arvo.split(":")
if type[0] in dict:
dict[type[0]] += float(type[1])
else:
dict[type[0]] = float(type[1])