Преобразование строкового представления списка в фактический объект списка
У меня есть строка, которая похожа на список, скажем:
fruits = "['apple', 'orange', 'banana']"
Каким образом можно преобразовать это в объект списка?
- Python «присоединяется» по обе стороны от строк?
- Python Ближайшие координаты в словаре
- Удаление символа '\ xa0' из многомерного списка
- Почему элементы пропускаются, если я удаляю из списка, итерации?
- python – представление булевых выражений со списками
>>> fruits = "['apple', 'orange', 'banana']" >>> import ast >>> fruits = ast.literal_eval(fruits) >>> fruits ['apple', 'orange', 'banana'] >>> fruits[1] 'orange'
Как указано в комментариях, ast.literal_eval безопасен . Из документов:
Безопасно оценить узел выражения или строку, содержащую выражение Python. Представленная строка или узел могут состоять только из следующих литеральных структур Python: строк, чисел, кортежей, списков, dicts, booleans и None.
Это можно использовать для безопасной оценки строк, содержащих выражения Python, из ненадежных источников без необходимости самостоятельно анализировать значения.
Простой вызов eval()
будет выполнять:
fruits = eval("['apple', 'orange', 'banana']") fruits > ['apple', 'orange', 'banana']
Или, как объясняется в этой статье , то же самое можно сделать более безопасно (это означает: без риска непреднамеренных побочных эффектов или инъекций вредоносного кода):
fruits = eval("['apple', 'orange', 'banana']", {'__builtins__':None}, {})
Преимущество этого решения заключается в том, что он не зависит от дополнительных модулей.
Я думаю, для этого и предназначен ast.literal_eval.
( http://docs.python.org/library/ast.html#ast.literal_eval )
- Как перенести первые N элементов из генератора или списка в Python?
- Как отсортировать список по номеру?
- Как закрепить два разных списка размеров в python
- Как избавиться от не-буквенно-цифровых символов в начале или конце строки
- Как отсортировать список с дублирующимися элементами по наибольшему количеству дубликатов вхождениях – Python
- Как получить первый элемент в списке кортежей?
- Дублирование и вставка в вложенный список Python
- Как запустить операцию над коллекцией в Python и собрать результаты?
- Python: случайные числа в список
- Как вставить None в список?
- Сортировка: как обрабатывать особый символ, отличный от алфавитного в Python 2?