Python 3.x 将键与.lower()组合并求和值

Python 3.x 将键与.lower()组合并求和值,python-3.x,Python 3.x,我有一本字典,上面的键可以是大写或小写。我的所有值都是int。我想对所有键执行.lower(),并将映射到同一小写键的键的值相加 输入示例: {'banana':3, 'Banana': 2, 'apple': 4, 'PeAr':7} 输出: {'banana':5, 'apple': 4, 'pear':7} 看看这个: 这可能会导致您出现以下情况: result = {k.lower(): sum([mydict[x] for x in mydict if x.lower() == k

我有一本字典,上面的键可以是大写或小写。我的所有值都是int。我想对所有键执行.lower(),并将映射到同一小写键的键的值相加

输入示例:

{'banana':3, 'Banana': 2, 'apple': 4, 'PeAr':7}
输出:

{'banana':5, 'apple': 4, 'pear':7}
看看这个:

这可能会导致您出现以下情况:

result = {k.lower(): sum([mydict[x] for x in mydict if x.lower() == k.lower()]) for k, v in mydict.items()}

理想情况下,您希望在问题出现之前避免它。创建原始词典时,只需在将其存储到词典中之前调用键上的
.lower()

无论如何,您可以使用:

或者甚至使用
.setdefault
,尽管我个人并不喜欢(部分原因是您必须两次提到该键,如果不是硬编码,默认值可能在迭代之间发生变化)


我知道这并不能回答你的问题,但只是一个建议:在存储同名密钥之前解决这个问题,如果你能帮助的话。我知道资本化在变化,所以它们并不“相同”,但在这种情况下,这似乎是一种非常糟糕的做法。是的,我同意。如果可以,我会的
from collections import defaultdict

d = {'banana':3, 'Banana': 2, 'apple': 4, 'PeAr':7}

out = defaultdict(int)

for k, v in d.items():
    out[k.lower()] += v

print(out)
# defaultdict(<class 'int'>, {'banana': 5, 'apple': 4, 'pear': 7})
d = {'banana': 3, 'Banana': 2, 'apple': 4, 'PeAr': 7}

out = {}

for k, v in d.items():
    k = k.lower()
    try:
        out[k] += v
    except KeyError:
        out[k] = v

print(out)
# {'banana': 5, 'apple': 4, 'pear': 7}
d = {'banana': 3, 'Banana': 2, 'apple': 4, 'PeAr': 7}

out = {}

for k, v in d.items():
    k = k.lower()
    out[k] = out.setdefault(k, 0) + v

print(out)
# {'banana': 5, 'apple': 4, 'pear': 7}