1

キーが同じ文字で始まる場合、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'):

どんな助けでも大歓迎です

4

3 に答える 3

3

各キーの最初の文字を取得し、それを呼び出し.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)}
于 2013-08-15T10:10:54.617 に答える
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})
于 2013-08-15T10:35:56.830 に答える