54

データ フレーム:

pair = collections.defaultdict(collections.Counter)

例えば

pair = {'doc1':  {'word1':4, 'word2':3}, 
        'doc2':  {'word1':2, 'word3':4},
        'doc3':  {'word2':2, 'word4':1},
         ...}

データ フレームを保持したいが、このパーツのタイプを変更する{'word1':4, 'word2':3} {'word1':2, 'word3':4}``...現在はCounterであり、 が必要dictです。

からデータを取得するためにこれを試しましたが、 for each docpairを作成する方法がわかりません:dict

new_pair = collections.defaultdict(collections.Counter)
for doc, tab in testing.form.items():
    for word, freq in tab.items():
        new_pair[doc][word] = freq 

出力を変更したくありません。各ドキュメントで必要なのは、データ型がではなく であることだけですdictCounter

4

5 に答える 5

85

ACounterはすでにdict- またはそのサブクラスです。dictしかし、何らかの理由で本当に a が必要な場合は、ワンライナーです。

>>> c = Counter(word1=4, word2=3)
>>> c
Counter({'word1': 4, 'word2': 3})
>>> dict(c)
{'word1': 4, 'word2': 3}

任意のマッピング (辞書のように動作するもの) を に渡すことができ、同じ内容のdictが得られます。dict自分で構築するために繰り返し処理する必要はありません。

これにより、ネストされたループではなく、本体に 1 行の 1 つのループが作成されます。ただし、次の形式のコード:

 thing = a new empty collection
 for elem in old_thing:
    Add something to do with elem to thing

通常、ジェネレーター式またはリスト、セット、または辞書内包表記を使用して 1 行で実行できます。を構築しているdictので、辞書内包表記 (あなたが最も興味を持っているのは例のセクションです) がありそうです。読者のための演習として、それを考え出すことにします。;-)

于 2012-06-17T05:00:18.447 に答える
0

Counterdictです。ただし、必要に応じて、次のコードが必要になる場合があります。

new_pair ={}
for doc, tab in pari.items():
    new_pair[doc] = {}
    for word, freq in tab.items():
        new_pair[doc][word] = freq

口述はnew_pairあなたが望むものです。幸運を!

于 2012-06-17T05:15:55.443 に答える
0
new_pair = {} # simple dict at the top level
for doc, tab in testing.form.items():
    for word, freq in tab.items():
        # top-level values is word counters
        new_pair[doc].setdefault(word, Counter()) += freq
于 2012-06-17T05:10:45.227 に答える
0

多分あなたは探している:

>>> from collections import defaultdict
>>> pair = defaultdict(dict)
>>> pair[3][2]='hello'
>>>
>>> pair
defaultdict(<type 'dict'>, {3: {2: 'hello'}})
>>>
>>> pair[3]
{2: 'hello'}
>>> 
于 2012-06-17T05:00:29.343 に答える