对同一关键字下的dict值求和



我有一个项目和值的列表:

users_lst = [' spotify: 50.4n', 'pandora: 23.4n', 'pandora: 22.1n', 'n', 'applemusic: n]

我想把它转换成一本字典,像这样:

users = {'spotify': 50.4, 'pandora': 45.5}

我当前的代码没有总结潘多拉的值:

users_lst = ['spotify: 50.4n', 'pandora: 23.4n', 'pandora: 22.1n']
for i in users_lst:
i = i.split(':')
key = i[0]
value = i[1]
users[key] = value
print(users) #output: {'spotify': ' 50.4n', 'applemusic': ' 22.1n'}

任何建议都将不胜感激!更喜欢使用不导入模块的解决方案。

*编辑:更新列表以包括非浮动类型、空白和前导/尾随空格情况

我可以使用一个简单的for循环和一堆像这样的字符串清理操作来解决这个问题,

users_lst = ['spotify: 50.4n', 'pandora: 23.4n', 'pandora: 22.1n']
d = dict()
for item in users_lst:
key, val = item.split(":")
val = float(val.strip().replace("n", ""))
if key not in d:
d[key] = val
else:
d[key] = d[key] + val


print(d) # {'spotify': 50.4, 'pandora': 45.5}

您可以使用dict.get((方法,并消除像这样的if-else检查的使用,

users_lst = ['spotify: 50.4n', 'pandora: 23.4n', 'pandora: 22.1n']
d = dict()
for item in users_lst:
key, val = item.split(":")    
d[key] = d.get(key, 0) + float(val)


print(d) # {'spotify': 50.4, 'pandora': 45.5}

使用collections.defaultdict

例如:

from collections import defaultdict
users_lst = ['spotify: 50.4n', 'pandora: 23.4n', 'pandora: 22.1n']
result = defaultdict(float)
for i in users_lst:
key, value = i.strip().split(":")
result[key] += float(value)

print(result)  # OR print(dict(result))

输出:

defaultdict(<class 'float'>, {'spotify': 50.4, 'pandora': 45.5})
for i in users_lst:
key, value = i.strip().split(':')
users[key] = users.get(key, 0.0) + float(value)

有很多方法可以做到这一点:

users_lst = ['spotify: 50.4n', 'pandora: 23.4n', 'pandora: 22.1n']
user = dict()
for item in users_lst:
key, val = item.split(":")
val = float(val.strip())
user[key] = user.get(key,0)+value

最新更新