当我在字符串words
上运行以下代码时:
def word_feats(words):
return dict([(word, True) for word in words])
print(word_feats("I love this sandwich."))
我用字母而不是单词得到输出字典理解:
{'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}
我做错了什么?
答案 0 :(得分:8)
您需要在空白处显式拆分字符串:
def word_feats(words):
return dict([(word, True) for word in words.split()])
这使用不带参数的str.split()
,在任意宽度的空格上拆分(包括制表符和行分隔符)。
字符串是一系列单独的字符,否则直接迭代将只是遍历每个字符。
然而,分裂为单词必须是您需要自己执行的显式操作,因为不同的用例对如何将字符串拆分为单独的部分有不同的需求。例如,标点符号是否计算在内?如果用括号或引用括起来的话,那些字母应该被分开吗?等
如果你所做的只是将所有值设置为True
,那么使用dict.fromkeys()
代替它会更有效率:
def word_feats(words):
return dict.fromkeys(words.split(), True)
演示:
>>> def word_feats(words):
... return dict.fromkeys(words.split(), True)
...
>>> print(word_feats("I love this sandwich."))
{'I': True, 'this': True, 'love': True, 'sandwich.': True}
答案 1 :(得分:3)
您必须split
words
字符串:
def word_feats(words):
return dict([(word, True) for word in words.split()])
print(word_feats("I love this sandwich."))
>>> words = 'I love this sandwich.'
>>> words = words.split()
>>> words
['I', 'love', 'this', 'sandwich.']
您还可以使用要拆分的其他字符:
>>> s = '23/04/2014'
>>> s = s.split('/')
>>> s
['23', '04', '2014']
def word_feats(words):
return dict([(word, True) for word in words.split()])
print(word_feats("I love this sandwich."))
[OUTPUT]
{'I': True, 'love': True, 'this': True, 'sandwich.': True}