字典与多个相同的键与不同的值python

时间:2014-03-20 12:08:28

标签: python list file dictionary key-value

我有.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}

谢谢!

3 个答案:

答案 0 :(得分:0)

使用defaultdict中的collectionsfloat一起使用doc中有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)

答案 1 :(得分:0)

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)

答案 2 :(得分:0)

因此我们不允许使用导入。我想出了这个想法,你觉得怎么样?

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