2

Pythonのクラスを使用してCounter、大きな Python 辞書のキーの単語数を数えています。キーがインクリメントされた数値で、値がカウンター関数の戻り値である新しい辞書を作成しています。これは私の新しい辞書がどのように見えるかです:

TP = {1:Counter({u'x':1, u'b':1, u'H':3}),2:Counter({u'j':1, u'm':4, u'e':2})...}

可能であれば、Counter括弧 ( and ) を削除して、辞書が次のようになるようにします。

TP = {1:{u'x':1, u'b':1, u'H':3}, 2:{u'j':1, u'm':4, u'e':2}...}

それが不可能な場合は、() 内のネストされた辞書にアクセスする方法を教えてもらえますか? ありがとうございました

4

2 に答える 2

6

これを行う意味がわかりませんCounter。のサブクラスでdictあり、すべてのメソッドをサポートしているため、そのままにしておいても問題はありませんが、この質問のためだけに通常の状態に戻しますdict

>>> from collections import Counter
>>> tp = {1:Counter({u'x':1, u'b':1, u'H':3}),2:Counter({u'j':1, u'm':4, u'e':2})}
>>> dict((k, dict(v)) for k, v in tp.iteritems())
{1: {u'x': 1, u'b': 1, u'H': 3}, 2: {u'e': 2, u'j': 1, u'm': 4}}

Python 2.7 以降の場合 (@Blender の提案による)

{k: dict(v) for k, v in tp.iteritems()}

サブディクショナリを反復処理する例:

for w, c in tp[1].iteritems():
    print w, c
于 2012-07-31T00:43:56.807 に答える
0

きれいな印刷方法を探しているかもしれません。

これは方法です:

def pprint_counter(c):
    for k, v in c.items():
        l=[u'{}:{}'.format(ks,vs) for ks,vs in v.items()]
        print '{:4}: {}'.format(k, ' '.join(l))

あなたの例でテストしてください:

tp = {1:Counter({u'x':1, u'b':1, u'H':3}),2:Counter({u'j':1, u'm':4, u'e':2})}
pprint_counter(tp)

版画:

   1: x:1 b:1 H:3
   2: m:4 j:1 e:2

サブ要素「x」にアクセスします。

tp[1]['x']=123
pprint_counter(tp)

版画:

   1: x:123 b:1 H:3
   2: m:4 j:1 e:2

したがって、`tp[1]['x'] を直接添字付けしてアクセスする個々の要素と、必要な書式設定にコードを追加するだけです。

于 2012-07-31T01:33:40.550 に答える