2017-09-24 17 views
-3

私の理解では、Pythonの辞書のための唯一のavaliableである.items()ということです。Pythonの辞書と項目()

は、しかし完全に実行されるコードの次のビット、で、.items()関数は、文字列のためにavaliableであることが表示されます。 (このコードはdoc2vecの前処理段階です)

私はこれをしばらく見てきましたが、このコードでは.items()が動作するように見えません。コードで

は、「ソース」は、インスタンスのちょうど属性です。それでも.items()を呼び出すことはできます。

私はここで何が欠けていますか?

class LabeledLineSentence(object): 

    def __init__(self, sources): 
     self.sources = sources 

     flipped = {} 

     # make sure that keys are unique 
     for key, value in sources.items(): 
      if value not in flipped: 
       flipped[value] = [key] 
      else: 
       raise Exception('Non-unique prefix encountered') 
+2

「ソース」(したがって 'self.sources')が' dict'のようなオブジェクト以外のものであることを暗示するものは、コードには何もありません。なぜそれが文字列だと思いますか?あなたは私に多くの時間を節約できますように答えハリーため – kdopen

答えて

0

に渡されているものを見ることができるかもしれない与えられたコードは、唯一の情報源は、インスタンスの属性であることを指定します。タイプを指定するものではありません。実際には、LabeledLineSentenceのインスタンスの作成時に指定された任意の型にすることができます。

i1 = LabeledLineSentence('sample text') # sources is now a string. Throws error! 
i2 = LabeledLineSentence({}) # source is a now a dictionary. No error! 

LabeledLineSentence実装では、sourcesパラメータがディクショナリであることが必要であることに注意してください。

+0

おかげで:)私は初心者と回答しています。私が見てきたすべてのYouTubeのpythonビデオでは、作成時にインスタンスのタイプを指定することについて何も言及していません。彼らは引数を渡すだけです。これらのことは、私がそのようなことを認識していないので、初心者のために時間がかかります。再びありがとう、私は初心者のpythonの本をもう一度打つ必要があるように見えます。 :) :) –

+0

あなたが本を探しているなら、私は初心者のための "pythonクラッシュコース"をお勧めします。基本が明確になると、「有効なPython」や「流暢なPython」などの書籍をチェックアウトすることができます。 –

0

.items()はitemsメソッドを持つどのクラスでも利用できます。例えば、私は

class MyClass: 
    def items(self): 
     return [1,2,3,4] 

を定義し、おそらくあなたのsourcesオブジェクトは、このような属性を持つクラスである

mc = MyClass() 
for i in mc.items(): print(i) 

を実行することができます。しかし、それはコンストラクタの引数であるLabeledLineSentenceであるので、何がわからないのです。

あなたは完全なソースコードに私たちを指すことはできますか?その後、我々は。

+0

感謝:)答えジェイソンのための –

関連する問題