I\'m trying to create a simple program that lets you enter a sentence which will then be split into individual words, saved as splitline
. For example:
Now that you have your dict the proper way, you can do regular dict
object stuff like checking for keys and grabbing values:
>>> text = 'the man lives in a house'
>>> mydict = {"the":1,"in":2,"a":3}
>>> splitlines = text.split()
>>> for word in splitlines:
if word in mydict:
text = text.replace(word,str(mydict[word]))
HOWEVER, note that with this:
>>> text
'1 m3n lives 2 3 house'
since a
is a key, the a
in man
will be replaced. You can instead use regex to ensure word boundaries:
>>> text = 'the man lives in a house'
>>> for word in splitlines:
if word in mydict:
text = re.sub(r'\b'+word+r'\b',str(mydict[word]),text)
>>> text
'1 man lives 2 3 house'
the \b
ensures that there is word boundary around each match.
I'm not sure why you're iterating over every character, assigning splitline
to be the same thing every time. Let's not do that.
words = text.split() # what's a splitline, anyway?
It looks like your terminology is backwards, dictionaries look like: {key: value}
not like {value: key}
. In which case:
my_dict = {'the': 1, 'in': 2, 'a': 3}
is perfect to turn "the man lives in a house"
into "1 man lives 2 3 house"
From there you can use dict.get
. I don't recommend str.replace
.
final_string = ' '.join(str(my_dict.get(word, word)) for word in words)
# join with spaces all the words, using the dictionary substitution if possible
dict.get
allows you to specify a default value if the key isn't in the dictionary (rather than raising a KeyError
like dict[key]
). In this case you're saying "Give me the value at key word
, and if it doesn't exist just give me word
"