2017-02-10 5 views
0

だが、私は次の形式でdefaultdictを持っていると言うが見つかりませんで(label, word)であり、関連する値は、与えられた単語が与えられたラベル(品詞のタグ付け)に適合する確率である。defaultdict、イベントキーが

たとえば、 'stand'という単語は名詞または動詞です。音声ラベルの残りの部分のためのように

theta[('NOUN', 'stand')] = 0.4 
theta[('VERB', 'stand')] = 0.6 
theta[('ADJ', 'stand')] = 0.0 

と:だから私のような何かを行うことができます。

私がする必要があるのは、含まれていない単語が呼び出され、関連付けられたラベルが「NOUN」であり、他のすべての関連ラベルが0の場合、辞書はデフォルトで1の値を返します。例:

value = theta[('NOUN', 'wordthatdoesntexist')] # this should be 1 
value = theta[('VERB', 'wordthatdoesntexist')] # this should be 0 

どうすればいいですか?ラムダを使用して初期化ステップでそれを行うことはできますか?それとも別の方法がありますか?

答えて

3

defaultdictはそうすることはできません。デフォルトのファクトリはキーにアクセスできません。あなたが不足しているキーにアクセスしようとすると、__missing__フックdictsを探して使用して、独自の辞書のサブクラスを書く必要があるだろう:

class SomeAppropriateName(dict): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
    def __missing__(self, key): 
     val = 1.0 if key[0] == 'NOUN' else 0.0 
     # Uncomment the following line if you want to add the value to the dict 
     # self[key] = val 
     return val 
+0

少なくとも擬似コードでは、ある種のチェックワード「単語が存在します」が必要です。 – pvg

+0

@pvg:あなたは何を意味するのか分かりません。私は、「キー・イン・セルフ」のケースを扱うために明示的なチェックが必要だと言っていますか? '__missing__'はその場合呼び出されません。 – user2357112

+1

それを読んで、私は「単語は存在しない」という意味はよく定義されていないと思います。 「どのキーの一部として存在しない」または「この品詞/単語のペアが存在しない」という意味ですか?しかし、それを選別する人のように見えます。 – pvg

-1

あなたはdictsetdefault()方法を使用することができます。

d.setdefault(u, int(u[0] == "NOUN")) 

udにある場合、setdefaultはd[u]を返します。さもなければ、それはdictに挿入され、値は第2引数として提供されます。

+0

誰かがdownvoteを説明できますか? –

関連する問題