1

Pythonでは、現在、複合キーを持つ辞書を持っています。このディクショナリには、これらのキーが複数出現します。(キーはコンマで区切られています):

(A,B), (A,C), (A,B), (A,D), (C,A), (A,B), (C,A), (C,B), (C,B)

一意の発生を合計し、重複をカウントするものを既に持っているため、次のような出力が得られます。

(A,B)の数、 の4(A,C)2(B,C)6など。

次のようなループをコーディングする方法を知りたいです。

キーの最初の部分の最初の出現とそれに関連付けられた値とカウントを出力します。

お名前:あ:

Type Count

B     4
C     2

Total  6

名前: B:

Type Count
A    3
B    2
C    3
Total 8

ループを作成first statement = the first statementして次のことを行う必要があることはわかっていますが、これにアプローチ/コーディングする方法がわかりません。

4

2 に答える 2

2

これを実行する少し遅いアルゴリズムを次に示します。

def convert(myDict):
    keys = myDict.keys()
    answer = collections.defaultdict(dict)
    for key in keys:
        for k in [k for k in keys if k.startswith(key[0])]:
            answer[key[0]][k[1]] = myDict[k]
    return answer

最終的に、あなたが求めているのはトライだと思います

于 2012-10-15T23:53:46.890 に答える
0

辞書に特定のキーに対して複数の値があると言うのは少し誤解を招きます。Pythonはそれを許可していません。代わりに、あなたが持っているのはタプルであるキーです。それらのタプルを解凍し、ネストされた辞書を再構築します。

これが私がそれをする方法です:

import collections

# rebuild data structure
nested = collections.defaultdict(dict)
for k, v in myDict.items():
    k1, k2 = k                # unpack key tuple
    nested[k1][k2] = v

# print out data in the desired format (with totals)
for k1, inner in nested.items():
    print("%s\tType\tCount" % k1)
    total = 0
    for k2, v in innner.items():
        print("\t%s\t%d" % (k2, v))
        total += v
    print("\tTotal\t%d" % total)
于 2012-10-16T00:02:38.340 に答える