Как создать список из существующего значения JSON? [Дубликат]

У меня была такая же проблема, и в большинстве случаев она разрешена

  • Синхронизировать проект с файлами градиентов
  • Doing Build -> Clean Project
  • Doing File -> Invalidate Caches

Но на этот раз ошибка сохранялась даже после выполнения всех этих действий, и, наконец, я нашел виновника.

Проблема была в xml файл, где я дал обычное строковое значение для android:id вместо ресурса ресурса id .

MISTAKE

android:id="username"

CORRECTION

android:id="@id/username"

Отказывание вещей, связанных с resources в xml-файлах, является основной причиной этой ошибки. Остерегайтесь того, что он не может быть показан как ошибка в файле макета xml.

ПРИМЕЧАНИЕ

В большинстве случаев компилятор показывает вам источник ошибки в сообщении. Попробуйте сначала проверить его, прежде чем пытаться использовать другие решения

463
задан martineau 4 May 2017 в 21:01
поделиться

10 ответов

text.split()

Этого должно быть достаточно, чтобы хранить каждое слово в списке. words уже является списком слов из предложения, поэтому нет необходимости в цикле.

Во-вторых, это может быть опечатка, но у вас есть ваш цикл немного испорчен. Если вы действительно хотите использовать append, это будет:

words.append(word)

not

word.append(words)
378
ответ дан Kevin Guan 19 August 2018 в 15:28
поделиться

Разделяет строку в text на любом последовательном прогоне пробелов.

words = text.split()      

Разделите строку в text на разделителе: ",".

words = text.split(",")   

Переменная слов будет list и содержит слова из text, разделенные на разделителе.

363
ответ дан Chris_Rands 19 August 2018 в 15:28
поделиться

Как насчет этого алгоритма? Разделите текст на пробелы, затем нарисуйте пунктуацию. Это тщательно удаляет пунктуацию с края слов, не нанося вреда апострофам внутри таких слов, как we're.

>>> text
"'Oh, you can't help that,' said the Cat: 'we're all mad here. I'm mad. You're mad.'"

>>> text.split()
["'Oh,", 'you', "can't", 'help', "that,'", 'said', 'the', 'Cat:', "'we're", 'all', 'mad', 'here.', "I'm", 'mad.', "You're", "mad.'"]

>>> import string
>>> [word.strip(string.punctuation) for word in text.split()]
['Oh', 'you', "can't", 'help', 'that', 'said', 'the', 'Cat', "we're", 'all', 'mad', 'here', "I'm", 'mad', "You're", 'mad']
23
ответ дан Colonel Panic 19 August 2018 в 15:28
поделиться
  • 1
    Приятно, но некоторые английские слова действительно содержат преходящую пунктуацию. Например, конечные точки в e.g. и Mrs. и конечный апостроф в притяжательной frogs' (как в frogs' legs) являются частью этого слова, но будут разделены этим алгоритмом. Правильная обработка аббревиатур может быть грубо достигнута путем обнаружения разделенных точками инициализаций плюс использование словаря особых случаев (например, Mr., Mrs.). Отличие притяжательных апострофов от одинарных кавычек значительно сложнее, поскольку для этого требуется разбор грамматики предложения, в котором содержится это слово. – Mark Amery 29 January 2016 в 01:02
  • 2
    @MarkAmery Ты прав. С тех пор мне пришло в голову, что некоторые знаки препинания, такие как em emash, могут отделять слова без пробелов. – Colonel Panic 30 September 2016 в 08:57

Я хочу, чтобы моя функция python разделила предложение (ввод) и сохранила каждое слово в списке

Метод str().split() делает это, он принимает строку, разделяет это в список:

>>> the_string = "this is a sentence"
>>> words = the_string.split(" ")
>>> print(words)
['this', 'is', 'a', 'sentence']
>>> type(words)
<type 'list'> # or <class 'list'> in Python 3.0

Проблема, с которой вы столкнулись, связана с опечаткой, вы написали print(words) вместо print(word):

Переименование word переменная в current_word, это то, что у вас было:

def split_line(text):
    words = text.split()
    for current_word in words:
        print(words)

.. когда вы должны были сделать:

def split_line(text):
    words = text.split()
    for current_word in words:
        print(current_word)

Если по какой-то причине вы хотите вручную создать list в цикле for, вы должны использовать метод list append(), возможно, потому, что хотите записать все слова (например):

my_list = [] # make empty list
for current_word in words:
    my_list.append(current_word.lower())

Или немного более аккуратно, используя list-comprehension :

my_list = [current_word.lower() for current_word in words]
14
ответ дан dbr 19 August 2018 в 15:28
поделиться

str.split ()

Возвращает список слов в строке, используя sep в качестве разделителя ... Если sep не указан или Нет, применяется другой алгоритм разделения: пробелы последовательного пробела рассматриваются как один разделитель, и результат не будет содержать пустых строк в начале или в конце, если строка имеет ведущее или завершающее пробелы.

>>> line="a sentence with a few words"
>>> line.split()
['a', 'sentence', 'with', 'a', 'few', 'words']
>>> 
72
ответ дан gimel 19 August 2018 в 15:28
поделиться

shlex имеет функцию .split() . Он отличается от str.split() тем, что он не сохраняет кавычки и рассматривает цитируемую фразу как одно слово:

>>> import shlex
>>> shlex.split("sudo echo 'foo && bar'")
['sudo', 'echo', 'foo && bar']
11
ответ дан Mark Amery 19 August 2018 в 15:28
поделиться

Я думаю, вы сбиты с толку из-за опечатки.

Замените print(words) на print(word) внутри вашего цикла, чтобы каждое слово было напечатано на другой строке

3
ответ дан TankorSmash 19 August 2018 в 15:28
поделиться

В зависимости от того, что вы планируете делать с вашим предложением как список, вы можете посмотреть Natural Language Took Kit . Он в значительной степени занимается обработкой и оценкой текста. Вы также можете использовать его для решения своей проблемы:

import nltk
words = nltk.word_tokenize(raw_sentence)

Это имеет дополнительное преимущество в разделении пунктуации.

Пример:

>>> import nltk
>>> s = "The fox's foot grazed the sleeping dog, waking it."
>>> words = nltk.word_tokenize(s)
>>> words
['The', 'fox', "'s", 'foot', 'grazed', 'the', 'sleeping', 'dog', ',', 
'waking', 'it', '.']

Это позволяет отфильтровать любую пунктуацию, которую вы не хотите, и использовать только слова.

Обратите внимание, что другие решения, использующие string.split(), лучше, если вы не планируете делать какие-либо сложные манипуляции с рассылкой.

43
ответ дан tgray 19 August 2018 в 15:28
поделиться
  • 1
    split() полагается на пустое пространство как разделитель, поэтому он не сможет отделить дефисные слова - и разделенные фразами с длинной линией тоже не будут разделены. И если предложение содержит любые знаки препинания без пробелов, они не будут придерживаться. Для любого реального синтаксического анализа текста (например, для этого комментария) ваше предложение nltk намного лучше, чем split () `. – hobs 14 December 2011 в 15:10
  • 2
    Потенциально полезный, хотя я бы не характеризовал это как разделение на слова. По любому простому английскому определению ',' и "'s" не являются словами. Обычно, если вы хотите разбить предложение выше на «слова», в знаке пунктуации вы хотите разбить запятую и получить "fox's" как одно слово. – Mark Amery 25 January 2016 в 18:52
  • 3
    Python 2.7+ по состоянию на апрель 2016 года. – AnneTheAgile 20 September 2016 в 20:57
0
ответ дан BlackBeard 31 October 2018 в 02:43
поделиться
0
ответ дан Carlos Abraham 31 October 2018 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: