如何在字典中添加具有相似键的值?

时间:2013-08-15 10:08:53

标签: python

如果他们的键以相同的字母开头,我想在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'):

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:3)

取每个键的第一个字符,在其上调用.upper()并按该大写字母加总值。以下循环

out = {}
for key, value in original.iteritems():
    out[key[0].upper()] = out.get(key[0].upper(), 0) + value

应该这样做。

你也可以使用collections.defaultdict() object来简化一点:

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)}

答案 1 :(得分:2)

您可以在此处使用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})

答案 2 :(得分:1)

有很多方法可以做到这一点。这是使用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})