Перейти к содержимому

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

  • автор:

Как преобразовать строку в словарь в 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

Словари в Python это структура данных вида «ключ-значение». То есть чтобы перевести строку в словарь, надо хотя бы описать условие что будет ключами, а что значениями.

Например, если мы хотим ключами сделать символы, а значениями их количество в строке, то можно воспользоваться Counter

from collections import Counter s = 'Hello, World!' Counter(s) # Counter() 

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

iggor-markin

Я бы рекомендовал задачу слегка расширить, т.е. сообщить больше контекста — возможно, вы делаете вообще не то, что надо, изобретаете велосипед на костылях, а есть простое правильное решение. Например, может вам нужно сгенерировать JSON и вы его генерируете таким экзотическим методом, когда есть стандартные.

Решения вопроса 0
Ответы на вопрос 2
можно распаковать с помощью цикла и получить ключ+значение строкой

list_data = [] data = for k, v in data.items(): list_data.append(k + ':' + str(v))

так же можно распаковать во множества и получить список со множествамими ключей и значений
new_data = data.items()

Преобразовать строку в словарь

Есть желание её разобрать но нет желания делать это вручную. Попробовал питон: модули json и ast не понимают такую структуру:

>>> string = 'NAME1 = ;>;' >>> print string NAME1 = ;>; >>> import json >>> json.loads(string) Traceback (most recent call last): File "", line 1, in File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads return _default_decoder.decode(s) File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib64/python2.6/json/decoder.py", line 338, in raw_decode raise ValueError("No JSON object could be decoded") ValueError: No JSON object could be decoded >>> import ast >>> ast.literal_eval(string) Traceback (most recent call last): File "", line 1, in File "/usr/lib64/python2.6/ast.py", line 49, in literal_eval node_or_string = parse(node_or_string, mode='eval') File "/usr/lib64/python2.6/ast.py", line 37, in parse return compile(expr, filename, mode, PyCF_ONLY_AST) File "", line 1 NAME1 = ;>; ^ SyntaxError: invalid syntax 

На что это похоже и есть ли стандартные инстурменты для такого рода структур? Не обязательно питон.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *