Я пытаюсь получить доступ к диктату, который я создал под названием Бренды. Затем я пытаюсь заменить информацию из пользовательского ввода на информацию из диктата. Я изо всех сил пытаюсь распечатать и заменить текст пользовательского ввода. В настоящее время я могу только распечатать все содержимое таблицы со вставленными словами, что, к сожалению, не очень помогает.

BRANDS = {
  'Velcro': 'hook and loop fastener',
  'Kleenex': 'tissues',
  'Hoover': 'vacuum',
  'Bandaid': 'sticking plaster',
  'Thermos': 'vacuum flask',
  'Dumpster': 'garbage bin',
  'Rollerblade': 'inline skate',
  'Asprin': 'acetylsalicylic acid'
}


userinput = input("Sentence: ")
print('a', userinput, 'is', BRANDS[userinput])

Это пример того, что должен делать мой код.

Sentence: I bought some Velcro shoes.

Result >>> I bought some hook and loop fastener shoes.
4
Lachlan 20 Авг 2018 в 04:37

5 ответов

Лучший ответ

Вы можете определить функцию для циклического перемещения по вашему словарю и выполнять str.replace несколько раз:

def replacer(x, d):
    for k, v in d.items():
        x = x.replace(k, v)
    return x

userinput = input("Sentence: ")
print(replacer(userinput, BRANDS))

Примере:

Sentence: I bought some Velcro shoes.
I bought some hook and loop fastener shoes.
1
jpp 20 Авг 2018 в 01:41

Вы можете использовать dict.get() со списком, чтобы перебрать значения вашего пользовательского ввода (разделенные пробелом) и заменить их значениями из вашего словаря BRANDS. Метод dict.get() сначала проверяет, существует ли ключ этого конкретного значения i. Если это произойдет, он вернет соответствующее значение из указания BRANDS или просто сохранит исходное значение i. Затем вы можете передать этот список str.join() для формирования окончательной строки

print(' '.join(BRANDS.get(i,i) for i in userinput.split()))

Надеюсь это поможет!

0
U10-Forward 27 Авг 2018 в 05:46

Вот пример, который не требует зацикливания всех элементов в вашем dict.

Используя регулярное выражение, вы можете выполнить замену за один проход вместо использования str.replace для каждого элемента в BRANDS.

Код

import re

BRANDS = ...

def replacer(sentence, replacements):
    pattern = '|'.join(replacements)
    repl = lambda m: replacements[m.group()]

    return re.sub(pattern, repl, sentence)

userinput = input("Sentence: ")

print(replacer(userinput, BRANDS))

Примере

Sentence: Kleenex and Hoover
tissues and vacuum
0
Olivier Melançon 20 Авг 2018 в 03:07

Попробуй это:

for key in BRANDS:
    userinput = userinput.replace(key, BRANDS[key])

print(userinput)
0
Loocid 20 Авг 2018 в 01:41

ИЛИ ЖЕ:

def repl(d,s):
    d={k:v for k,v in d.items() if k in s}
    return s.replace(next(iter(d)),next(iter(d.values())))
inp = input("Sentence: ")
print(repl(BRANDS,inp))

Пример вывода:

Sentence: I bought some Velcro shoes
I bought some hook and loop fastener shoes
0
U10-Forward 20 Авг 2018 в 02:22
51923190