【问题标题】:Dictionary with multiple same keys with different values python具有多个具有不同值的相同键的字典python
【发布时间】:2026-02-13 17:50:01
【问题描述】:

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

谢谢!

【问题讨论】:

  • 向我们展示您的尝试并解释为什么它不起作用。

标签: python list file dictionary key-value


【解决方案1】:

collections中的defaultdictfloat一起使用(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] 去掉换行符。 float() 不在乎。
【解决方案2】:

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) 行可能并不真正需要。

【讨论】:

  • 谢谢!这可以正确完成工作,并且适用于其余代码。
  • 在不从集合中导入的情况下,有没有办法做同样的事情?
  • 是的,但不要害怕进口——尤其是来自核心库的进口。尝试在没有导入的情况下在 python 中做所有事情确实是愚蠢的。
【解决方案3】:

所以我们不允许使用导入。我想出了这个主意,你怎么看?

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

【讨论】:

  • 谁说你“不允许”使用导入?这是纯 python 中的正确方法,但您应该遵循@fredtantini 示例的样式。并且不要使用type作为变量名,因为它是一个重要的内置函数。
  • 我的编程老师说的。 “将您的程序更改为使用pythons标准字典。由于安全问题,禁止使用导入,将来您应该只使用内置插件,并且不要信任导入,除非它被告知使用它们”。这是为了介绍理工大学的programmin。对于类型,我只是尝试将这些名称翻译成你理解的东西,因为它们是我的语言。
最近更新 更多