试图找到一种方法来对不同的值使用相同的键

时间:2019-04-11 01:32:28

标签: python dictionary key

我是编程的新手,我正在用Python编写一个小程序,以使用“字典”对句子中的单词进行缩写。我的想法是写出一个句子,任何包含为键的单词都将返回其缩写值。 我正在使用split()方法来帮助完成此任务。问题是当我有一个部分与另一个相似的键时,例如,键“ account”将被打印为“ acct”,但是当我希望将另一个键“ account takeover”被打印为“ 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))

注意:帐户,帐户接管

帐户,接受合并

我希望它打印为 帐户,ATO

1 个答案:

答案 0 :(得分:0)

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

您可以使用包含正则表达式的列表来代替字典,而这些正则表达式与要匹配的单词和短语以及它们的缩写匹配,并且对每个单词和单词都调用re.sub()

您应该订购此产品,以便更长的比赛排在第一位。否则,它将在尝试替换account之前替换account takeover

您应该使用正则表达式而不是普通字符串,以便可以将单词边界与\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()