【问题标题】:Using Embedded Dictionary for iterative character replacement使用嵌入式字典进行迭代字符替换
【发布时间】:2009-10-05 05:14:09
【问题描述】:

我试图理解一个迭代函数,它接受一个字符串“12345”并根据靠近字符串中每个字符的键字典返回所有可能的拼写错误。

outerDic = {}
Dict1 = {'1':'2','2':'q'}
outerDic['1'] = Dict1
Dict1 = {'1':'1','2':'q','3':'w','4':'3'}
outerDic['2'] = Dict1
Dict1 = {'1':'2','2':'w','3':'e','4':'4'}
outerDic['3'] = Dict1
Dict1 = {'1':'3','2':'e','3':'r','4':'5' }
outerDic['4'] = Dict1
Dict1 = {'1':'4','2':'r','3':'t','4':'6' }
outerDic['5'] = Dict1
outerDic

输出应该返回一个字符串列表

12345
22345
q2345
11345
1q345
13345
12245
12e45
12445

等等……

我的功能设置如下:

def split_line(text):
 words = text.split()
 for current_word in words:
  getWordsIterations()

我想了解如何设置 getWordsIterations() 函数来遍历字典并系统地替换字符。

【问题讨论】:

    标签: python function iteration


    【解决方案1】:

    我不确定内部 dicts 是什么意思,都带有键 '1'、'2' 等,它们基本上只是代表可能出现拼写错误的列表的替代品吗?但随后一些(但不是全部)也会包括“正确”字符......非打字错误......?!抱歉,但是您在此演示文稿中确实非常令人困惑-该示例没有太大帮助(为什么第二个位置从来没有“ w”,如果我理解您的怪异,这应该是一个可能的错字数据结构...?等等)。

    所以,在等待澄清的同时,让我假设您想要为每个输入字符表示所有可能的单字符拼写错误——列表会很好,但在这种情况下字符串会更紧凑,并且本质上是等效的:

    possible_typos = {
      '1': '2q',
      '2': '1qw3',
      '3': '2we4',
      '4': '3er5',
      '5': '4rt6',
    }
    

    现在,如果您只关心有 1 个拼写错误的案例:

    def one_typo(word):
      L = list(word)
      for i, c in enumerate(L):
        for x in possible_typos[c]:
          L[i] = x
          yield ''.join(L)
        L[i] = c
    

    例如,for w in one_typo("12345"): print w 发出:

    22345
    q2345
    11345
    1q345
    1w345
    13345
    12245
    12w45
    12e45
    12445
    12335
    123e5
    123r5
    12355
    12344
    1234r
    1234t
    12346
    

    “任何数量的错别字”都会产生一个巨大的列表——这就是你想要的吗?还是“0到2个错别字”?或者究竟是什么……?

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      相关资源
      最近更新 更多