如果它们的键以相同的字母开头,我想将 Python 中字典中的值加在一起。
例如,如果我有这本字典:{'apples': 3, 'oranges': 5, 'grapes': 4, 'apricots': 2, 'grapefruit': 9}
结果将是:{'A': 5,'G': 13, 'O': 5}
我只走了这么远,我被困住了:
for k in dic.keys():
if k.startswith('A'):
任何帮助将不胜感激
如果它们的键以相同的字母开头,我想将 Python 中字典中的值加在一起。
例如,如果我有这本字典:{'apples': 3, 'oranges': 5, 'grapes': 4, 'apricots': 2, 'grapefruit': 9}
结果将是:{'A': 5,'G': 13, 'O': 5}
我只走了这么远,我被困住了:
for k in dic.keys():
if k.startswith('A'):
任何帮助将不胜感激
取每个键的第一个字符,调用.upper()
它并用那个大写字母对你的值求和。以下循环
out = {}
for key, value in original.iteritems():
out[key[0].upper()] = out.get(key[0].upper(), 0) + value
应该这样做。
您还可以使用一个collections.defaultdict()
对象来简化一点:
from collections import defaultdict:
out = defaultdict(int)
for key, value in original.iteritems():
out[key[0].upper()] += value
或者你可以使用itertools.groupby()
:
from itertools import groupby
key = lambda i: i[0][0].upper()
out = {key: sum(v for k, v in group) for key, group in groupby(sorted(original.items(), key=key), key=key)}
你可以在defaultdict
这里使用:
from collections import defaultdict
new_d = defaultdict(int)
for k, v in d.iteritems():
new_d[k[0].upper()] += v
print new_d
印刷:
defaultdict(<type 'int'>, {'A': 5, 'O': 5, 'G': 13})
很多方法可以做到这一点。这是一个Counter
没有其他人建议的变体,与 Ashwini 的解决方案不同,它不会创建潜在的长中间字符串:
>>> from collections import Counter
>>> dic = {'apples': 3, 'oranges': 5, 'grapes': 4, 'apricots': 2, 'grapefruit': 9}
>>> sum((Counter({k[0].upper():dic[k]}) for k in dic), Counter())
Counter({'G': 13, 'A': 5, 'O': 5})