Как преобразовать строку в словарь в Python
Программистам постоянно приходится преобразовывать различные типы данных, и очень важно делать это правильно. В этой статье мы разберем, как можно преобразовать строку в словарь.
Давайте вкратце припомним, что собой представляют строки и словари. Строка — это коллекция символов, каждый из которых, в принципе, тоже считается строкой, поскольку в Python нет соответствующего символьного типа данных. Словарь в Python хранит данные в виде пар ключ-значение. Ключи в словаре должны быть уникальны.
От редакции Pythonist: подробнее о строках читайте в статье «Строки в Python».
А теперь перейдем непосредственно к преобразованию строк в словари.
Конвертируем строку в словарь
Использование метода json.loads ()
Мы можем преобразовать строку в словарь с помощью функции json.loads() . Чтобы ее использовать, нужно импортировать модуль json .
# Импортировать json import json # Инициализировать строку string = » # Вывести строку print(«String is «, string) # Преобразовать строку в словарь при помощи json.loads() res_dict = json.loads(string) # Вывести словарь print(«The resultant dictionary is «, res_dict) # Результат: # String is # The resultant dictionary is
Сперва мы инициализируем строку, которую затем будем преобразовывать в словарь. Для инициализации используется переменная string . В этой строке содержатся названия разных видов птиц. При помощи оператора print выводим нашу строку.
Далее мы преобразуем строку в словарь при помощи функции json.loads() . В качестве параметра этой функции передается переменная string . Результат работы функции (словарь) мы присваиваем переменной res_dict . Затем при помощи оператора print выводим наш словарь.
Использование метода ast.literal.eval()
Еще одна функция, которую применяют для преобразования строк в словари, — ast.literal.eval() . Чтобы ее использовать, нужно импортировать библиотеку ast .
# Импортировать ast import ast # Инициализировать строку string = » # Вывести строку print(«String is «, string) # Преобразовать строку в словарь при помощи ast.literal_eval() res_dict = ast.literal_eval(string) # Вывести словарь print(«The resultant dictionary is «, res_dict) # Результат: # String is # The resultant dictionary is
Сначала мы импортируем библиотеку ast . Затем инициализируем строку string , содержащую названия игр. При помощи оператора print выводим нашу строку.
После этого мы конвертируем строку в словарь при помощи функции ast.literal_eval() . В качестве параметра мы передаем ей нашу строку. Результат присваиваем переменной res_dict . После этого снова вызываем оператор print для вывода словаря.
Использование генераторного выражения
Для преобразования строки в словарь можно использовать и генераторное выражение.
# Инициализировать строку string = «Amna — 80, Sara — 100, Javed — 65, Saim — 93, Bilal — 100» # Вывести строку print(«String is «, string) # Преобразовать строку в словарь, используя strip() и split() res_dict = dict((a.strip(), int(b.strip())) for a, b in (element.split(‘-‘) for element in string.split(‘, ‘))) # Вывести словарь print(«The resultant dictionary is «, res_dict) print(type(res_dict)) # Результат: # String is Amna — 80, Sara — 100, Javed — 65, Saim — 93, Bilal — 100 # The resultant dictionary is #
Здесь мы инициализируем строку string , в которой будущие пары ключей и значений разделены дефисами и идут через запятую. Наша строка содержит имена студентов и их оценки.
Во вложенном цикле for мы используем строковые функции strip() и split() , чтобы привести пары ключ-значение к нормальному для словаря виду.
Функция split() делит строку на отдельные подстроки, используя в качестве разделителей запятые и дефисы. Функция strip() удаляет пробелы между подстроками. Эта техника не очень эффективна при преобразовании строк, поскольку для получения результата требуется много времени.
В заключение мы распечатали созданный словарь и убедились, что получили именно словарь, выведя его тип.
От редакции Pythonist: о методе split() читайте в статье «Строковые методы split() и join() в Python».
Заключение
В этой статье мы на примерах разобрали три способа преобразовать строку в словарь. Мы сделали это при помощи функции json.loads() из модуля json , функции ast.literal.eval() из модуля ast . Также мы показали, как можно конвертировать строку в словарь при помощи генераторного выражения. Этот способ, пожалуй, самый запутанный, зато позволяет преобразовать в словарь строку, изначально не отформатированную по типу словарных пар ключ-значение.
Перевод статьи Kalsoom Bibi «Python String to a Dict».
Какие бывают методы преобразования строк в python?
Расскажу про 10 методов, которые пока мне пригодились:
1) str.capitalize() возвращает копию строки, где первая буква — заглавная, остальные — строчные.
2) str.find(sub[, start[, end]]) возвращает первый индекс, где находится подстрока sub в срезе строки[start:end]. Если подстрока не нашлась, вернет -1.
3) str.isalpha() возвращает True, если строка не пустая и состоит только из букв.
4) str.join(iterable) через конкатенацию собирает строку из элементов, полученных от iterable через разделитель, к которому применяется метод. Примеры:
a = ['Lock,','Stock', 'and','Two' ,'Smoking' ,'Barrels'] ''.join(a) # 'Lock,StockandTwoSmokingBarrels' ' '.join(a) # 'Lock, Stock and Two Smoking Barrels' ', '.join(['Ночь', 'улица', 'фонарь', 'аптека', 'Бессмысленный и тусклый свет']) # 'Ночь, улица, фонарь, аптека, Бессмысленный и тусклый свет'
5) str.lower возвращает копию строки, где все буквы строчные.
6) str.removeprefix(prefix, /) если строка начинается с prefix, то метод вернёт копию строки без него.
7) str.replace(old, new[, count]) вернет копию строки, в которой все подстроки old будут заменены на new. Если указать необязательный параметр count, то не все old, а только указанное количество будет заменено.
8) str.split(sep=None, maxsplit=- 1) разбивает строку на подстроки по разделителю sep и собирает их в список. Параметр maxsplit указывает сколько раз нужно разбивать строку. См. пример:
'1,2,3'.split(',', maxsplit=1) # ['1', '2,3']
9) str.strip([chars]) возвращает копию строки без пробелов в начале и конце строки, если метод используется без параметров. Если передать буквы chars, то в начале и конце будут удалены они, см. пример:
'www.example.com'.strip('cmowz.') # 'example'
10) str.upper() возвращает копию строки, где все буквы заглавные.
Остальные методы можно посмотреть в официальной документации .
Как ввести математическое выражение в Python?
Я написал программу которая строит графики двух переменных но мне нужно организовать так чтоб функция не была забита в программе а ее вводил пользователь. Я пробовал это сделать но не выходит так как ввод возвращает строку а не математическое выражение. Как нужно правильно это организовать?
- Вопрос задан более трёх лет назад
- 2514 просмотров
1 комментарий
Средний 1 комментарий
Проверка строки на математическое выражение
Нужно написать программу, которая будет проверять строку на математическое выражение.
Условие: Вводится строка S, содержащая в себе цифры, точки, знаки «+», «-«. Необходимо проверить, может ли S являться математическим выражением.
Примеры:
«-3.2 + 715 + 2» — является математическим выражением;
«-.1.2..+. 08», «—10 + 5», «001 — .» и так далее — не являются математическими выражениями.
Спасибо за помощь!
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Проверка строки на математическое выражение
Нужно написать программу, которая будет проверять строку на математическое выражение. Условие: .
Из строки посчитать математическое выражение
Суть задачи в том, что задается булевая функция в базисе (отрицание, коньюнкция и дизъюнкция.
Преобразование строки в математическое выражение
Добрый вечер уважаемые форумчане. Пишу программу на php, по методам оптимизации. Все вроде.
Преобразование строки в математическое выражение
Здравствуйте! Не подскажете рабочий способ перевода строки в математическое выражение и чтобы.
1183 / 759 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
Сообщение от Thienrao 
а почему вот это не мат. выражение, с точки зрения ЯП?
1 2 3
20 10 0
Регистрация: 01.11.2021
Сообщений: 9
В самом задании нужно избежать подобного повторения знаков сложения и вычитания.
1183 / 759 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
Но вообще тут нужна Полька.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
class ForTaskError(Exception): pass def f(x): try: if any(map(lambda z: z in x, ('--', '++'))): raise ForTaskError return eval(x) except: return 'Что-то тут не то' print(f('-3.2 + 715 + 2')) print(f('2 + 2 - 2 * 2 / 2 // 2 % 2 ** 2')) print(f('-.1.2..+. 08')) print(f('--10 + 5')) print(f('001 -'))
1 2 3 4 5
713.8 3.0 Что-то тут не то Что-то тут не то Что-то тут не то
Добавлено через 6 минут
И нормальная регулярка.
Регистрация: 01.11.2021
Сообщений: 9
Спасибо за помощь, разберусь с вашим кодом. Вопрос: как можно всё это реализовать без использования методов и функций для работы со строками в Python? Если это возможно.
1183 / 759 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
Входящее выражение в любом случае придется разбирать на составляющие, поэтому не очень понятен вопрос, что считать функцией и методом?
Можно сделать в один проход по коллекции, проверить что все элементы могут являться флотами \ интами, и каждый оператор представлен в единичном экземпляре между операндами. Если все нормально, вычислять через польскую нотацию. Тогда решение будет ограничено логикой и списком.
![]()
![]()
35345 / 19945 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13
Сообщение от enx 
Но вообще тут нужна Полька.
— зачем? Выражение-то простое Тут лучше регэкспы применить.
Как вариант:
1 2 3 4 5 6 7 8 9 10 11
import re def check(expr): le=len(expr) pattern=r'([\-\+]?[1-9]\d*(\.\d*))+' x=re.match(pattern,expr) return x.span()[1]==le print(check("-8.9+7.8-7.6+56")) # True print(check("-8.9+7.8a-7.6+56")) # False print(check("-8.9++7.8-7.6+56")) # False
Те, кто дружат с рег. выражениями, поправят.
1183 / 759 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
Catstail, да, тут можно даже еще проще, проверить сразу на двойные вхождения, через обход пробовать преобразовать операнд со знаком во флот, отловить ошибку. Что-то я перемудрил на ночь глядя.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Перевод строки в математическое выражение
Добрый день, Есть ли готовые решения (методы) для перевода строки в математическое выражение?
Выполнить математическое выражение из строки
Приветствую! Скажите, есть 2 строки: strVal = "2" strExpr = "* 3 — (2+4)" надо высчитать.
Вычислить математическое выражение из строки (string)
Требуется вычислить математическое выражение без использования сторонних библиотек, записанное в.
Функция по переводу из строки в математическое выражение с последующим расчетом
Нужна функция на подобии eval в JS. Есть математическое выражение в TextBox. Например, 4 * 5 или.

Анализатор вводимой строки с целью вычислить введенное математическое выражение
Привет! Пишу для себя простенький мат анализатор вводимой строки с целью вычислить введенное.

Математическое выражение
ПОдскажите как это реализовать на windows form? просто на консоль вывести это проще простого.
