2017-06-11 65 views
0

它可能很簡單,但我只是一個初學者。 如果我有這本字典,Python dictionary;總和值相同的鍵

ds = {"ABab": 6.25, "aBab": 6.25, "Abab": 6.25, "abab": 6.25, "ABab": 6.25, "aBab": 6.25, "Abab": 6.25, "abab": 6.25, "ABab": 6.25, "aBab": 6.25, "Abab": 6.25, "abab": 6.25, "ABab": 6.25, "aBab": 6.25, "Abab": 6.25, "abab": 6.25} 

是有辦法來創建這個?:

ds_new = {"ABab": 25, "aBab": 25, "Abab": 25, "abab": 25} 

如果沒有辦法做到這一點,謝謝福爾反正在尋找它。

+3

我不認爲這是可能有兩個名稱相同或更多個鍵Python中的字典。密鑰應該有一個唯一的名稱。 – Liliane

+0

可能重複https://stackoverflow.com/questions/21518271/how-to-sum-values-of-the-same-key-in-a-dictionary但是,我真的不喜歡接受的答案.. –

+0

如果你編輯第一行然後「打印」你得到{'ABab':6.25,'aBab':6.25,'Abab':6.25,'abab':6.25} – Marichyasana

回答

1

你不能在Python中有兩次相同的密鑰。字典中的每個鍵都必須是唯一的。查看documentation

如果某個鍵發生多次,該鍵的最後一個值就會成爲新詞典中的對應值。

你的字典是自動的而不是關於重複的鍵,它總是會評估最後分配的鍵。

duplicate_keys = {"ABab": 6.25, "aBab": 6.25, "Abab": 6.25, "abab": 6.25, "ABab": 6.25, "aBab": 6.25, "Abab": 6.25, "abab": 6.25, "ABab": 6.25, "aBab": 6.25, "Abab": 6.25, "abab": 6.25, "ABab": 6.25, "aBab": 6.25, "Abab": 6.25, "abab": 6.25} 

unique_keys = {"ABab": 6.25, "aBab": 6.25, "Abab": 6.25, "abab": 6.25} 

duplicate_keys == unique_keys # True 
2

如前所述,您不能將這些數據存儲在字典中。您可以將其存儲爲其他形式,如元組列表。

ds = [("ABab", 6.25), ("aBab", 6.25), ("Abab", 6.25), ("abab", 6.25), 
     ("ABab", 6.25), ("aBab", 6.25), ("Abab", 6.25), ("abab", 6.25), 
     ("ABab", 6.25), ("aBab", 6.25), ("Abab", 6.25), ("abab", 6.25), 
     ("ABab", 6.25), ("aBab", 6.25), ("Abab", 6.25), ("abab", 6.25)] 

然後你就可以使總數的字典通過首先找到獨特的鍵,然後總結這有鑰匙作爲他們的第一個值的元組的值。

keys = set(k for k, _ in ds) 
totals = {unique_key: sum(v for k, v in ds if k==unique_key) 
    for unique_key in keys} 

或者另一種方式(可能更好)

totals = {} 
for key, value in ds: 
    totals[key] = totals.get(key, 0) + value 
相關問題