Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有多个相同键和不同值的字典_Python_List_File_Dictionary_Key Value - Fatal编程技术网

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

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 我想制作一本字典,名字是键,钱是值,如果文件中有不止一次的钱,那么钱应该加在一起。所以

我有这个例子的.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
中的
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])