Python字典;相同键的总和值

时间:2017-06-11 11:05:27

标签: 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}

如果没有办法做到这一点,那么无论如何,谢谢你的注意。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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