When I run the following code on a string words
:
def word_feats(words):
return dict([(word, True) for word in words])
print(word_feats("I love this sandwich."))
I get the output dict-comprehension in letters instead of words:
{'a': True, ' ': True, 'c': True, 'e': True, 'd': True, 'I': True, 'h': True, 'l': True, 'o': True, 'n': True, 'i': True, 's': True, 't': True, 'w': True, 'v': True, '.': True}
What am I doing wrong?
You have to
split
thewords
string:Example
You can also use other characters on which to split:
Your Code
You need to explicitly split the string on whitespace:
This uses
str.split()
without arguments, splitting on arbitrary-width whitespace (including tabs and line separators). A string is a sequence of individual characters otherwise, and direct iteration will indeed just loop over each character.Splitting into words, however, has to be an explicit operation you need to perform yourself, because different use-cases will have different needs on how to split a string into separate parts. Does punctuation count, for example? What about parenthesis or quoting, should words grouped by those not be split, perhaps? Etc.
If all you are doing is setting all values to
True
, it'll be much more efficient to usedict.fromkeys()
instead:Demo: