1

複数のキーの下に複数の値を持つ辞書があります。値の単一の合計は必要ありません。各キーの合計を見つける方法を見つけたいです。ファイルはタブで区切られており、識別子はこれらの項目の 2 つの Btarg の組み合わせです。これらの各識別子には複数の値があります。
テスト ファイルは次のとおりです: これは、以下の目的の結果を含むテスト ファイルです。

パターンアイテムの豊富さ

1 アリ 2

2 ドッグ 10

3 キリン 15

1 アリ 4

2 ドッグ 5

期待される結果は次のとおりです。

パターン1アリ、6

パターン2ドッグ、15

パターン3キリン、15

これは私がこれまでに持っているものです:

for line in K:

    if "pattern" in line:
        find = line
        Bsplit = find.split("\t")
        Buid = Bsplit[0]
        Borg = Bsplit[1]
        Bnum = (Bsplit[2])
        Btarg = Buid[:-1] + "//" + Borg


        if Btarg not in dict1:
            dict1[Btarg] = []
        dict1[Btarg].append(Bnum)
    #The following used to work
    #for key in dict1.iterkeys():
        #dict1[key] = sum(dict1[key])
    #print (dict1)

エラーメッセージ「サポートされていないオペランドタイプの +: 'int' および 'list' なしで Python 3 でこれを機能させるにはどうすればよいですか? 前もって感謝します!

4

1 に答える 1

1

使用するfrom collections import Counter

ドキュメントから:

c = Counter('gallahad')
Counter({'a': 3, 'l': 2, 'h': 1, 'g': 1, 'd': 1})

あなたのコメントに応えて、私はあなたが何を望んでいるのかを知っていると思いますが、あなたのデータがどのような構造になっているのかはわかりません.データを次のように整理できることは当然だと思います

In [41]: d
Out[41]: [{'Ant': 2}, {'Dog': 10}, {'Giraffe': 15}, {'Ant': 4}, {'Dog': 5}]

最初に defaultdict を作成します

from collections import defaultdict
a = defaultdict(int)

次に、カウントを開始します。

In [42]: for each in d:
            a[each.keys()[0]] += each.values()[0]

結果:

In [43]: a
Out[43]: defaultdict(<type 'int'>, {'Ant': 6, 'Giraffe': 15, 'Dog': 15})

更新 2

この形式でデータを取得できるとします。

In [20]: d
Out[20]: [{'Ant': [2, 4]}, {'Dog': [10, 5]}, {'Giraffe': [15]}]

In [21]: from collections import defaultdict

In [22]: a = defaultdict(int)

In [23]: for each in d:
    a[each.keys()[0]] =sum(each.values()[0])
   ....:     

In [24]: a
Out[24]: defaultdict(<type 'int'>, {'Ant': 6, 'Giraffe': 15, 'Dog': 15})
于 2012-10-26T20:01:41.043 に答える