具有多个相同键但值不同的字典



我有这个。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中的defaultdictfloat(文档中有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])

相关内容

  • 没有找到相关文章

最新更新