【问题标题】:Trying to find a way to use same key for different value试图找到一种方法将相同的密钥用于不同的值
【发布时间】:2019-04-11 09:46:07
【问题描述】:

我是编程新手,我正在用 Python 编写一个小程序,以使用“字典”来缩写句子中的单词。这个想法是我会写出一个句子,并且作为键包含的任何单词都将返回其缩写值。 我正在使用split() 方法来帮助实现这一目标。问题是当我有一个部分类似于另一个的密钥时,例如密钥“帐户”将打印为“acct”,但是当我希望将不同的密钥“帐户接管”打印为“ato”时,它将不起作用。我假设 split() 现在对我不利。我查看了字符串方法和字典方法,但无法提出解决方案。有任何想法吗?非常感谢任何帮助。

notes = input("Notes: ")

def simple_library(notes):
    abbreviate = notes.lower().split(" ")
    abbreviate_sentence = {
        "account": "acct",
        "account takeover": "ato"
    }
    output = ""
    for words in abbreviate:
        output += abbreviate_sentence.get(words, words) + " "
    return output.upper()


print(simple_library(notes))

注意事项:帐号、帐号接管

帐户,帐户接管

我希望它打印为 账户,税务局

【问题讨论】:

    标签: python dictionary key


    【解决方案1】:

    如果您将输入拆分为单词,这将不起作用。

    您可以使用包含与您要匹配的单词和短语以及它们的缩写相匹配的正则表达式的列表,而不是使用字典,然后为每个单词和短语调用re.sub()

    您应该对此进行排序,以便将较长的匹配项放在首位。否则,它将在尝试替换 account takeover 之前替换 account

    您应该使用正则表达式而不是普通字符串,以便可以将单词边界与\b 匹配。否则,当它是另一个词的一部分时,它可以缩写一个词,例如将accounting 变成accting

    所以代码看起来像:

    import re
    
    def simple_library(notes):
        notes = notes.lower()
        abbreviate_sentence = [
            (r"\baccount\s+takeover\b", "ato"),
            (r"\baccount\b", "acct")
        ]
        for regexp, replace in abbreviate_sentence:
            notes = re.sub(regexp, replace, notes)
        return notes.upper()
    

    【讨论】:

    • 非常感谢!我试试看
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    相关资源
    最近更新 更多