如果给出了值,如何从字典中打印密钥

时间:2014-06-21 17:57:56

标签: python dictionary

这是我的词典和定义词典:

Vocab={'Precaution' : "a measure taken in advance to avert possible evil or to secure good results",
'Cautious' : "showing, using, or characterized by caution",
'Cautionary' : "of the nature of or containing a warning",
'Dissuade' : "to deter by advice or persuasion; persuade not to do something",
'Persuasion' : "the act of persuading or seeking to persuade"}

这是另一个字典,但是,这个字典包含拉丁词根作为键,词汇作为值。

 Roots={'Caut' :{'Precaution', 'Catious', 'Cautionary'}, 'Saud' :{'Dissuade', 'Persuasion'}}

现在这是一个小型的问答游戏:

print "If you want to know the root of the word, type 'root'"
while 1:
    y = random.choice(Vocab.keys())
    print y
    t2=raw_input("What is the definition?: ")
    if t2 in Vocab[y]:
        print 'All those words were in the definition!'
        print Vocab[y]
    elif t2 not in Vocab[y]:
        if t2 == 'root':
            print Roots
        elif t2 != 'root':
            for key,y in Roots.iteritems()):
                print key

我希望用户输入' root',然后将根弹出作为提示。根弹出后,屏幕上会显示相同的问题词,供他尝试回答。当用户输入' root'时,整个字典出现。如何打印出该词所依据的词根?

2 个答案:

答案 0 :(得分:2)

建议1:找到输入字在值中的键值对,然后打印键。

if t2 == 'root':
    for root,words in Roots.iteritems():
        if y in words:
            print root
            break

建议2:创建此词典

invRoots = {word:root for root,words in Roots.iteritems() for word in words}

并使用

if t2 == 'root':
    print invRoots[y]

另一件事:您的Roots包含拼写错误:'Catious'

答案 1 :(得分:1)

我不确定我理解你需要什么,但为什么不在一个数据结构中直接用主要词汇单词存储根?这样可以轻松打印当前单词的根目录,而无需任何反向词典或其他查找策略。

vocab = {
    'Precaution' : {'root': 'Caut', 'def': 'definition': 'a measure ...'},
    'Cautious'   : {'root': 'Caut', 'def': 'showing, using, ...'},
    'Dissuade'   : {'root': 'Saud', 'def': 'to deter ...'},
}

如果您的问题需要在未来朝着这个方向发展,那么这种方法也与OO设计一致,其中每个Word实例都包含其相关属性:定义,根,替代拼写等。< / p>

例如:

wroots = { w : r for r, ws in Roots.iteritems() for w in ws }
vocab  = { w : dict(root = wroots[w], defin = d) for w, d in Vocab.iteritems() }