从词典中理解选择器

时间:2014-01-12 18:29:19

标签: python dictionary

对于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

因此,如果有人输入“north go the bear 5”,我会收到输出:

方向:北方,动词:go,stop_words:the,nouns:bear,numbers:5

这是关于学习Python困难之路(练习48)的教程。

对于每个单词,我如何打印出它的类型和值?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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