Как преобразовать строку в словарь в Python

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

Давайте вкратце припомним, что собой представляют строки и словари. Строка — это коллекция символов, каждый из которых, в принципе, тоже считается строкой, поскольку в 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».