首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python字典与所需的键不匹配

Python字典与所需的键不匹配
EN

Stack Overflow用户
提问于 2019-02-27 20:37:34
回答 5查看 713关注 0票数 1

我有一本字典。例如,

代码语言:javascript
复制
dict = { "wd":"well done", "lol":"laugh out loud"}

问题是,如果文本中有类似"lol?"的内容,那么它根本不会展开。下面是我用来替换字典键的代码:

代码语言:javascript
复制
def contractions(text, contractions_dict=dict):
    for word in text.split():
        if word.lower() in contractions_dict:
            text = text.replace(word, contractions_dict[word.lower()])
    return text

问题是由于'lol''?'之间缺少空间。我该如何解决这个问题?

之后,建议的更新代码如下:

代码语言:javascript
复制
 dict1 = {
          "wd":"well done",
          "lol":"laugh out loud"
         }

 def contractions(text, contractions_dict=dict1):
     for key in contractions_dict:
         text = text.replace(key, contractions_dict[key])
     return text

 text = "lol?"
 text=contractions(text)
 print(text)

对于上面的示例有效,但在长文本中,此代码进行了不必要的替换。

例如,一岁的鸭子为什么看不见,而团队的努力代表着一岁多的鸭子和一岁的鸭子手中的seato。

这是我根据实际数据得出的结果的一部分。需要帮助。

EN

回答 5

Stack Overflow用户

发布于 2019-02-27 20:41:46

你的错误来自于你拆分文本的方式。python中str.split()的默认大小写是在空格上拆分,这意味着"wtf?“不是拆分。

正如您在documentation中看到的,str.split()可以接收要使用的分隔字符列表。

您可以通过使用以下命令来解决此特定问题:

text.split(sep=[' ', '?'])

但最有可能的是,您希望使用更多的字符作为分隔点。

票数 1
EN

Stack Overflow用户

发布于 2019-02-27 20:47:32

有一个更好的解决方案,如果你看一下visaversa,对于每个键,用该键的值替换整个文本中的值:

代码语言:javascript
复制
def contractions(text, contractions_dict=dict):
    for k, v in contractions_dict.items():
        text = text.replace(k,v)
    return text

另外,请注意:

不使用dict作为变量名,此名称是内置的,您将覆盖它的功能。

示例输入和输出:

代码语言:javascript
复制
In [42]: contractions('this is wd and lol?')
Out[42]: 'this is well done and laugh out loud?'
票数 1
EN

Stack Overflow用户

发布于 2019-02-27 21:01:42

不是检查文本是否包含在字典中,而是遍历字典并检查关键字是否在文本中。但不建议这样做,因为它包含嵌套循环。

代码语言:javascript
复制
def contractions(text, contractions_dict=dict):
    for word in text.split():
        for key in contradictions_dict:
            if key in word:
                text = text.replace(word, contractions_dict[key])
    return text

相反,您可能希望使用replace方法自动替换每个键的所有匹配项。替换将自动查找并替换单词。不需要自己迭代文本。

代码语言:javascript
复制
def contractions(text, contractions_dict=dict):
    for key in contradictions_dict:
        text = text.replace(key, contractions_dict[key])
    return text
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54905696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档