簡體   English   中英

對同一鍵下的字典值求和

[英]Sum dict values under the same key

我有一個項目和值的列表:

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

我想把它轉換成字典,像這樣:

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

我當前的代碼沒有總結潘多拉的價值:

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

for i in users_lst:
  i = i.split(':')
  key = i[0]
  value = i[1]

  users[key] = value

print(users) #output: {'spotify': ' 50.4\n', 'applemusic': ' 22.1\n'}

任何指針將不勝感激。 更喜歡使用不導入模塊的解決方案。

*編輯:更新列表以包括非浮點型、空白和前導/尾隨空格情況

我可以使用一個簡單的 for 循環和一堆像這樣的字符串清理操作來解決問題,

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

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.4\n', 'pandora: 23.4\n', 'pandora: 22.1\n']

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.4\n', 'pandora: 23.4\n', 'pandora: 22.1\n']
result = defaultdict(float)

for i in users_lst:
    key, value = i.strip().split(":")
    result[key] += float(value)
    
print(result)  # OR print(dict(result))

Output:

defaultdict(<class 'float'>, {'spotify': 50.4, 'pandora': 45.5})

有很多方法可以做到這一點:

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

user = dict()
for item in users_lst:
    key, val = item.split(":")
    val = float(val.strip())
    user[key] = user.get(key,0)+value
for i in users_lst:
  key, value = i.strip().split(':')
  users[key] = users.get(key, 0.0) + float(value)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM