私は(しかし、はるかに長い)などの辞書を持っている:サム値(パイソン)
codes = {
'113110': 7, '113310': 1, '213111': 1,
'213112': 3, '236115': 2, '236220': 1,
'238190': 1, '238330': 1, '238990': 2,
'311612': 1, '321214': 1, }
私は最初の2桁によってグループ化されたすべてのキーの合計値を知りたいです。だから、 '11'は8でなければなりません。しかし、次のようにチェックすると、キーのどこにでも'11 'が現れます。
group_11 = sum([ v for k,v in codes.items() if '11' in k])
# Returns 15 instead of 8
私はstartswith
を使用してみましたが、私はそれが、この文脈でどのように動作するかわかりません。これを好きではない:
group_11 = sum([ v for k,v in codes.items() if any(k.startswith('11')])
私は、チェック対象の20グループがありますが、私はグループが将来的に変更される可能性として、最初のx文字でグループ化キーの任意のセットを合計することができるようにしたいです。
あなたがソートするitertools.groupby
を使用(
groupby
が正しく動作するためにソートが重要である)とグループあなた
dict
のアイテムを最初の二つのキー文字で、各グループの値を合計することができ