Почему Python для слова в словах: итерирует отдельные символы вместо слов?

python string for-loop iteration string-iteration

2574 просмотра

2 ответа

Когда я запускаю следующий код в строке words:

def word_feats(words):
    return dict([(word, True) for word in words])
print(word_feats("I love this sandwich."))

Я получаю вывод dict-понимание в буквах вместо слов:

{'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}

Что я делаю неправильно?

Автор: user3564478 Источник Размещён: 12.11.2019 09:50

Ответы (2)


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}
Автор: Martijn Pieters Размещён: 23.04.2014 12:15

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}
Автор: sshashank124 Размещён: 23.04.2014 12:15
Вопросы из категории :
32x32