在一个列表中查找字符串并根据其说明,将其替换为另一个列表中的字符串

时间:2013-04-03 11:32:33

标签: python string list replace

基本上我有一个用户输入一个句子

例如。 “你好,你好吗?”

并从大型列表中将“是”替换为“am”,将“you”替换为“I”。返回:

“你好,我怎么样?”

问题是我不知道该怎么做。

所以我的列表看起来有点像reflections = [["I, you"],["are","am]] ---> etc.

到目前为止,我已经有一些代码从用户收集原始输入,然后调用此函数来回复它。

def reflects_users_string(reply):
    reply_list = reply.split()
    for _ in reply_list
       if ???? 
           ????
            ???? 
   else 
       print "i don't understand"

根据我的理解(noob here),它将用户输入转换为列表,然后将该列表中的每个项目与“reflection”列表中的项目进行比较,然后将一个列表中的相同字符串替换为旁边的字符串它,例如。 “是”与“我”

我一直在玩各种各样的方法来做到这一点,但似乎无法弄清楚

2 个答案:

答案 0 :(得分:0)

到目前为止,这是一个良好的开端。至于下一步,制作所有单词映射的大字典,查找该单词中的每个单词,如果有替换单词则替换它。

答案 1 :(得分:0)

尝试学习使用列表推导,这是一种在make迭代中过滤掉列表的强大方法。

让我们尝试用列表推导解决你的问题:

#first we need to create mappings in a dict for your reflections
reflect = {
    'you': 'I',
    'are': 'am'
}

# After we read user input
user_input = 'hello, how are you ?'


#Now look how we can replace all words in user_input from reflect with one line
reflected = [word for word in [reflect.get(key, key) for key in user_input.split()]]

print ' '.join(reflected)

让我们分析列表理解:

  1. 首先,我们将用户输入拆分为列表user_input.split()

  2. 然后我们通过用户输入单词for key in user_input.split()

  3. 对于用户输入单词中的每个单词,我们查询reflect dict。运用     reflect.get(key, key)是一种查询密钥reflect dict的方法     如果我们找不到密钥,则返回默认值key     代替。

  4. 最后,我们用[word for word in [getting reflected words from user input and a default value of the same word if we can't find it's reflection]]

  5. 包含所有这些理解

    和Voila!