2014-01-12 29 views
1

對於的raw_input句話我必須打印出每個單詞中理解一個選擇,它是從字典類型:從字典

wordDict = { 
      "directions": ['north', 'south', 'east', 'west', 'down', 'up', 'left', 'right'], 
      "verbs": ['go', 'stop', 'eat', 'kill'], 
      "stop_words": ['the', 'in', 'of', 'from', 'at', 'it'], 
      "nouns": ['door', 'bear', 'princess', 'cabinet'], 
      "numbers": range(10) 
      } 

stuff = raw_input("Write sentence here > ") 

words = stuff.split() 

for wds in words: 
    print (wordDict[wrd]), wrd 

所以,如果有人鍵入「北上熊5」我收到沿着線路輸出:

方向:北,動詞:走,STOP_WORDS:對,名詞:熊,號碼:5

這是在學習Python困難的方法(運動48)的教程。

對於每個單詞我將如何打印出它的類型和價值?

回答

1

你可以通過你的字典迭代得到的話說類型:

for word in words: 
    for key,values in wordDict.items(): 
     if word in values: 
      print key,word 

對於數字很好地工作,您需要將這些轉換爲字符串:

"numbers": [str(n) for n in range(10)] 

根據Raphaël的建議,另一種獲得類型的方法是:

def get_type(word): 
    for key,values in wordDict.items(): 
     if word in values: 
      return key 

for word in words: 
    print word, get_type(word) 

在這種情況下,即使多個列表中存在相同的單詞,它也會返回一種類型。它處理所有列表中缺少單詞的情況。在這種情況下打印None

+2

@Norbert我同意。道格,順便說一句,我覺得你在做一些假設,你的名單不會共享元素。當你的代碼不斷髮展時,情況可能不會如此,因此Norbert代碼是可以的,但是準備好爲一個條目獲得幾個「類型」:) –

+0

@Raphaël,謝謝,我添加了第二個變體。 –

2

而不是使用你的wordDict,因爲你的關鍵詞是你的搜索字典中的值,如果你事先轉換你的字典,你會很有優勢。

這將使您的查找代碼更加複雜和可讀。

此外,它的重要要注意的是,你的單詞將是唯一的,因爲單個單詞不能分成多個類別,因此,你可以很容易地使用你的單詞是鍵和類別作爲值。

>>> wordDict = { 
      "directions": ['north', 'south', 'east', 'west', 'down', 'up', 'left', 'right'], 
      "verbs": ['go', 'stop', 'eat', 'kill'], 
      "stop_words": ['the', 'in', 'of', 'from', 'at', 'it'], 
      "nouns": ['door', 'bear', 'princess', 'cabinet'], 
      "numbers": range(10) 
      } 
>>> wordDict_transpose = {str(elem): key for key, value in wordDict.items() 
          for elem in value} 
>>> for word in words.split(): 
    print "{}: {}".format(wordDict_transpose.get(str(word), 'Unknown'), word) 


directions: north 
verbs: go 
stop_words: the 
nouns: bear 
numbers: 5 
+0

查找速度也會更快。 –