Python字典;相同键的和值

2024-10-01 07:43:39 发布

您现在位置:Python中文网/ 问答频道 /正文

可能很简单,但我只是个初学者。 如果我有这本字典

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}

如果没有办法做到这一点,不管怎样,谢谢你的关注。


Tags: new字典ds初学者办法abab
2条回答

在python中,同一个键不能有两次。字典中的每一个键都必须是唯一的。查看documentation

If a key occurs more than once, the last value for that key becomes the corresponding value in the new dictionary.

字典是自动的,不考虑重复的键,它总是计算最后分配的键。

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

如前所述,不能将此数据存储在字典中。您可以将其存储为其他形式,如元组列表。

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

相关问题 更多 >