Python 具有多个相同键和不同值的字典
我有这个例子的.txt文件。它的名字是:钱Python 具有多个相同键和不同值的字典,python,list,file,dictionary,key-value,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 我想制作一本字典,名字是键,钱是值,如果文件中有不止一次的钱,那么钱应该加在一起。所以
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
中的defaultdict
与float
一起使用(示例中有int
)
一个
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)
可能不是必需的 所以我们不允许使用导入。我想出了这个主意,你觉得怎么样
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])
向我们展示您尝试过的内容并解释其不起作用的原因。没有必要使用
[:-1]
删除换行符float()
不在乎。谢谢!这项工作做得很正确,并且适用于其他代码。是否有其他方法可以在不从集合导入的情况下执行同样的操作?是的,但不要害怕导入-尤其是从核心库导入。试图在python中做任何事情而不使用导入确实是愚蠢的。谁说你“不允许”使用导入?这在纯python中是正确的方法,但是您应该遵循@fredtantini示例来获得样式。不要用type
作为变量名,因为它是一个重要的内置函数。“将您的程序更改为使用pythons standard dict。禁止使用导入,因为存在安全问题,将来您应该只使用内置,并且不要信任导入,除非它告诉您使用它们”。这是为了在科技大学引入编程。至于类型,我只是试着把这些名字翻译成你能理解的东西,因为它们是用我的语言写的。
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])