Попытка найти способ использовать один и тот же ключ для другого значения - PullRequest
1 голос
/ 11 апреля 2019

Я новичок в программировании и пишу небольшую программу на Python для сокращения слов в предложении с использованием словаря. Идея состоит в том, что я напишу предложение, и любое слово, включенное в качестве ключа, вернет его сокращенное значение. Я использую метод split(), чтобы помочь достичь этого. Проблема в том, что когда у меня есть ключ, который частично напоминает другой, например, ключ "account" будет напечатан как "acct", но когда я хочу, чтобы другой ключ "accountover" был напечатан как "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))

Примечания: учетная запись, захват учетной записи

СЧЕТ, ACCT TAKEOVER

Я бы хотел, чтобы он печатался как СЧЕТ, АТО

1 Ответ

0 голосов
/ 11 апреля 2019

Это не будет работать, если вы разделите ввод на слова.

Вместо использования словаря вы можете использовать список, содержащий регулярные выражения, которые соответствуют словам и фразам, которые вы хотите сопоставить, вместе с их сокращениями, и вы вызываете 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...