2016-06-14 3 views
1

functools.partialを使用している問題が発生しました。Python:functools.partialがエラーを返します

マイコード:

selected_words = ['awesome', 'great', 'fantastic', 'amazing', 'love', 'horrible', 'bad', 'terrible', 'awful', 'wow', 'hate'] 

def awsome_count(x,i): 
    if selected_words[i] in x: 
     y=1 
    else: 
     y=0 
    return y 

partialfun=functools.partial(awsome_count,0) 

partialfun(products[2]['word_count']) 

productsはSFrameです。

エラー:私はpartial機能を使用しています

TypeError         Traceback (most recent call last) 
<ipython-input-108-e51348a5d1f0> in <module>() 
----> 1 partialfun(products[2]['word_count']) 

<ipython-input-66-9ba8c7128add> in awsome_count(x, i) 
     1 def awsome_count(x,i): 
----> 2  if selected_words[i] in x: 
     3   y=1 
     4  else: 
     5   y=0 

TypeError: list indices must be integers, not dict 

私はapply機能を使用したいので、次のとおりです。あなたはあなたのpartial()オブジェクトを与えた

products['word_count'].apply(functools.partial(awsome_count,0) 

答えて

3

を1 位置引数:

functools.partial(awsome_count, 0) 

その引数が適用されます最初;追加の位置引数は、お電話ので、そのいずれかに追加されます。

partialfun(products[2]['word_count']) 

は次のようになります。あなたの関数の間違った順序ある

awesome_count(0, products[2]['word_count']) 

を。あなたは、関数のi引数にデフォルト値を適用したい場合は

が、代わりに位置引数のキーワード引数を使用します。

partialfun = functools.partial(awsome_count, i=0) 

今すぐコールpartialfun(products[2]['word_count'])になる

awsome_count(products[2]['word_count'], i=0) 
+0

ねえ、答えは間違いなく役に立ちました。私はちょうど今投票しました、私が間違って投票したかどうかは分かりません。申し訳ありません。 – alan

+0

125ポイント以上になるまでダウンボートできないので、心配する必要はありません。 :-) –

関連する問題