Программистам постоянно приходится преобразовывать различные типы данных, и очень важно делать это правильно. В этой статье мы разберем, как можно преобразовать строку в словарь.
Давайте вкратце припомним, что собой представляют строки и словари. Строка — это коллекция символов, каждый из которых, в принципе, тоже считается строкой, поскольку в Python нет соответствующего символьного типа данных. Словарь в Python хранит данные в виде пар ключ-значение. Ключи в словаре должны быть уникальны.
От редакции Pythonist: подробнее о строках читайте в статье «Строки в Python».
А теперь перейдем непосредственно к преобразованию строк в словари.
Конвертируем строку в словарь
Использование метода json.loads ()
Мы можем преобразовать строку в словарь с помощью функции json.loads()
. Чтобы ее использовать, нужно импортировать модуль json
.
# Импортировать json import json # Инициализировать строку string = '{"bird1": "Pigeon", "bird2": "Peacock", "bird3": "Eagle", "bird4": "Dove"}' # Вывести строку print("String is ", string) # Преобразовать строку в словарь при помощи json.loads() res_dict = json.loads(string) # Вывести словарь print("The resultant dictionary is ", res_dict) # Результат: # String is {"bird1": "Pigeon", "bird2": "Peacock", "bird3": "Eagle", "bird4": "Dove"} # The resultant dictionary is {'bird1': 'Pigeon', 'bird2': 'Peacock', 'bird3': 'Eagle', 'bird4': 'Dove'}
Сперва мы инициализируем строку, которую затем будем преобразовывать в словарь. Для инициализации используется переменная string
. В этой строке содержатся названия разных видов птиц. При помощи оператора print
выводим нашу строку.
Далее мы преобразуем строку в словарь при помощи функции json.loads()
. В качестве параметра этой функции передается переменная string
. Результат работы функции (словарь) мы присваиваем переменной res_dict
. Затем при помощи оператора print
выводим наш словарь.
Использование метода ast.literal.eval()
Еще одна функция, которую применяют для преобразования строк в словари, — ast.literal.eval()
. Чтобы ее использовать, нужно импортировать библиотеку ast
.
# Импортировать ast import ast # Инициализировать строку string = '{"game1": "Cricket", "game2": "Football", "game3": "badminton"}' # Вывести строку print("String is ", string) # Преобразовать строку в словарь при помощи ast.literal_eval() res_dict = ast.literal_eval(string) # Вывести словарь print("The resultant dictionary is ", res_dict) # Результат: # String is {"game1": "Cricket", "game2": "Football", "game3": "badminton"} # The resultant dictionary is {'game1': 'Cricket', 'game2': 'Football', 'game3': 'badminton'}
Сначала мы импортируем библиотеку 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 {'Amna': 80, 'Sara': 100, 'Javed': 65, 'Saim': 93, 'Bilal': 100} # <class 'dict'>
Здесь мы инициализируем строку 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».