2016-10-10 14 views
0

bigram = str [i] + str [i + 1]のところで 'bigram:frequency'という辞書を取得したいと考えています。strとdict内のbigramsの頻度

f_dict = {}

for i in range(0, len(string) - 1, step): 
    if string[i] + string[i + 1] in f_dict: 
     f_dict[string[i] + string[i + 1]] += 1 
    else: 
     f_dict[string[i] + string[i + 1]] = 1 

ことが可能です1行でdictの内包表記でこれを書くために、またはよりよい解決策は、(パフォーマンスの意味の範囲内)がある:これは私の解決策はありますか?

+0

あなたは 'STRING'の例を投稿することができますか? 'len()'は文字列の*文字数*を返しますが、* words *の数は返しません。同様に、 'string [i]'はi番目の文字を返します。 –

+0

@Chris Mueller(例:string = 'abcdefghijk')。私の場合、bigram - はテキストの2文字の部分文字列です(例えば、 'ab'、 'bc')。ステップによると、私はクロスとノンクロスバイグラムを考えます。 – Aver

答えて

0

次のようにあなたが行うことができます。

s = 'abaabaab' # Your string 
# Dictionary comprehension 
dic = {k : s.count(k) for k in {s[i]+s[i+1] for i in range(len(s)-1)}} 

結果:

In[2]: dic 
Out[3]: {'aa': 2, 'ab': 3, 'ba': 2} 
+0

ありがとう!私はdict compがより速く動作すると思ったが、私の解決策よりも遅く動作する。私のテキストは:あなたの方法:0.01200秒、私:0.00900秒(平均)。 – Aver

関連する問題