2017-09-24 84 views
-3

我的理解是.items()僅適用於python字典。python詞典和項目()

但是,在下面的代碼運行完美的代碼中,似乎.items()函數對於字符串是有效的。 (這段代碼是用於doc2vec的預處理階段的)

我已經看了一會兒,我找不到爲什麼.items()似乎在這段代碼中工作。

在代碼中,'sources'只是一個實例的屬性。但它可以調用.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

代碼中沒有任何東西顯示暗示'sources'(因此'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

謝謝你的答案Jayson :)我只是一個初學者,像你這樣的答案爲我節省了很多時間。在我看過的所有youtube python vids中,沒有一個提到在創建時指定實例的類型。他們只是通過爭論,就是這樣。這些東西對於初學者來說非常耗時,因爲我甚至都不知道這些東西。再次感謝,看起來我需要再次擊中初學者的Python書。 :) :) –

+0

如果你正在尋找書籍,我建議初學者的「蟒蛇速成課程」。一旦基本原理明確,您可以查看諸如「有效的Python」或「流利的Python」等書籍, –

0

.items()適用於任何具有item方法的類。例如,我可以定義

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

,然後運行

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

想必你sources對象是具有這樣的屬性一類的。但是我們不知道是什麼,因爲它是LabeledLineSentence的構造函數的一個參數。

您能指教我們完整的源代碼嗎?然後,我們可能會看到正在傳入的內容。

+0

感謝您的回答哈里:) –