Python 双向翻译,如果不是键或值,则打印单词

Python 双向翻译,如果不是键或值,则打印单词,python,Python,我在这个问题上遇到了麻烦。我已经查找了很多可能的解决方案,但似乎找不到正确的解决方案。我的问题是,如果输入的单词不是使用Python 2.7的键或值,我就无法让程序打印该单词 Tuc={"i":["o"],"love":["wau"],"you":["uo"],"me":["ye"],"my":["yem"],"mine":["yeme"],"are":["sia"]} while True: #Translates English to Tuccin and visa versa

我在这个问题上遇到了麻烦。我已经查找了很多可能的解决方案,但似乎找不到正确的解决方案。我的问题是,如果输入的单词不是使用Python 2.7的键或值,我就无法让程序打印该单词

Tuc={"i":["o"],"love":["wau"],"you":["uo"],"me":["ye"],"my":["yem"],"mine":["yeme"],"are":["sia"]}

while True:
    #Translates English to Tuccin and visa versa

    translation = str(raw_input("Enter content for translation.\n").lower())

    #this is for translating full phrases, both ways.
    input_list = translation.split()


    for word in input_list:
        #English to Tuccin
            if word in Tuc and word not in v:
                print ("".join(Tuc[word]))

            #Tuccin to English
            for k, v in Tuc.iteritems():
                if word in v and word not in Tuc:
                    print k

您可以创建一组具有集合理解的键和值,然后检查交点:

>>> set_list={k[0] if isinstance(k,list) else k for it in Tuc.items() for k in it}
set(['me', 'love', 'i', 'ye', 'mine', 'o', 'sia', 'yeme', 'are', 'uo', 'yem', 'wau', 'my', 'you'])


if set_list.intersection(input_list):
     #do stuff 

可以使用以下lambda查找翻译。如果单词不存在,它将返回空

find_translation = lambda w: [(k, v) for k, v in Tuc.items() if w==k or w in v]
用法=
find\u translation(translation)

编辑:

修改结果以转换整个字符串。 既然您提到要转换单词列表,那么让我们使用相同的lambda并将其用于多个单词

line = 'i me you rubbish'  # Only first three words will return something
# Let's change the lambda to either return something from Tuc or the same word back
find_translation = lambda w: ([v[0] for k, v in Tuc.items() if w==k or w in v] or [w])[0]

# Split the words and keep using find_transaction to either get a conversion or to return the same word
results_splits = [find_translation(part) for part in line.split()]
您将获得以下结果:

['o', 'ye', 'uo', 'rubbish']
您可以通过连接
results\u splits

' '.join(results_splits)
你能把翻译拿回来吗

“啊,你这垃圾”


让我们用简单的方法来做这件事……为
Tuccin到英语
英语到Tuccin
翻译创建两个dict

In [28]: Tuc_1 = {k:Tuc[k][0] for k in Tuc} # this dict will help in translation from English to Tuccin

In [29]: Tuc_1
Out[29]: 
{'are': 'sia',
 'i': 'o',
 'love': 'wau',
 'me': 'ye',
 'mine': 'yeme',
 'my': 'yem',
 'you': 'uo'}

In [30]: Tuc_2 = {Tuc[k][0]:k for k in Tuc}  # this dict will help in translation from Tuccin to English 

In [31]: Tuc_2
Out[31]: 
{'o': 'i',
 'sia': 'are',
 'uo': 'you',
 'wau': 'love',
 'ye': 'me',
 'yem': 'my',
 'yeme': 'mine'}
用法示例:

In [53]: translation = "I love You"

In [54]: input_list = translation.split()

In [55]: print " ".join(Tuc_1.get(x.lower()) for x in input_list if x.lower() in Tuc_1)
o wau uo

In [56]: print " ".join(Tuc_2.get(x.lower()) for x in input_list if x.lower() in Tuc_2)


In [57]: translation = "O wau uo"

In [58]: input_list = translation.split()

In [59]: print " ".join(Tuc_1.get(x.lower()) for x in input_list if x.lower() in Tuc_1)


In [60]: print " ".join(Tuc_2.get(x.lower()) for x in input_list if x.lower() in Tuc_2)
i love you

那么你的代码有什么问题吗?
v
在使用时没有在第一个
中声明,如果
代码中有很多内容,因此我不能让行为发生太大的变化,这只是我在更好地描述问题时遇到的问题的部分,例如,当我输入时,我恨你,我回来了,我需要它以o hate回应(单词未存储)uo翻译字典中的内容,列出值,但不打印我输入的单词,尚未存储感谢您的帮助,但这并没有翻译完整的句子一次只给我一个单词,它显示两个单词作为结果,我需要它以相同的方式操作,不同的单词not stored返回本身您可以轻松地进行字符串替换,或者更好的是,拆分字符串。我会更新答案,这是更接近,但它没有工作的两种方式。它只在一个方向上翻译,而不是翻译成英语,它改变了打印方向的行为,我的程序每行打印1个单词的翻译,因为在某些情况下,一个英语单词有2个Tuccin单词来处理同形词。所以这是y,我需要翻译,在翻译上每行打印一个单词,这是另一个问题。我建议你关闭这个问题,打开一个有新问题的新问题。我还没有机会测试这个答案,但我很难理解它
In [53]: translation = "I love You"

In [54]: input_list = translation.split()

In [55]: print " ".join(Tuc_1.get(x.lower()) for x in input_list if x.lower() in Tuc_1)
o wau uo

In [56]: print " ".join(Tuc_2.get(x.lower()) for x in input_list if x.lower() in Tuc_2)


In [57]: translation = "O wau uo"

In [58]: input_list = translation.split()

In [59]: print " ".join(Tuc_1.get(x.lower()) for x in input_list if x.lower() in Tuc_1)


In [60]: print " ".join(Tuc_2.get(x.lower()) for x in input_list if x.lower() in Tuc_2)
i love you