Python 3.x 将键与.lower()组合并求和值
我有一本字典,上面的键可以是大写或小写。我的所有值都是int。我想对所有键执行.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
{'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}