Как из строки сделать словарь python
Перейти к содержимому

Как из строки сделать словарь python

  • автор:

Как превратить строку в словарь python

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

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

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

Задача на словари — из строки сделать словарь

Author24 — интернет-сервис помощи студентам

Доброго времени суток
Задание:
Вводятся номера телефонов в одну строчку через пробел с разными кодами стран: +7, +6, +2, +4 и т.д. Необходимо составить словарь d, где ключи — это коды +7, +6, +2 и т.п., а значения — список номеров с соответствующими кодами. Полученный словарь вывести командой:
print(*sorted(d.items()))
Sample Input:
+71234567890 +71234567854 +61234576890 +52134567890 +21235777890 +21234567110 +71232267890
Sample Output:
(‘+2’, [‘+21235777890’, ‘+21234567110’]) (‘+5’, [‘+52134567890’]) (‘+6’, [‘+61234576890’]) (‘+7’, [‘+71234567890’, ‘+71234567854’, ‘+71232267890’])
Моя попытка решения:

Кликните здесь для просмотра всего текста

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
input_ = list(input().split()) d1 = sorted(input_) d2 = d1.append('No--') d3 = [d1[i][0] + d1[i][1] for i in range(len(d1)-1) if d1[i][1] != d1[i+1][1]] d4 = [[d1[i] for i in range(len(d1))]for j in range(len(d3))] for i in range(len(d4)): for j in range(len(d1)): if d4[i][j][0] + d4[i][j][1] != d3[i]: d4[i][j] = 0 d5 = [] for i in range(len(d4)): r = [] for j in range(len(d1)): if d4[i][j] != 0: r.append(d4[i][j]) d5.append(r) for i in range(len(d5)): d5[i] = sorted(d5[i],reverse = True) d = dict(zip(d3, d5)) print(*sorted(d.items()))

Вопрос: Можете подсказать, что не так с кодом. Понимаю, что такая постановка вопроса не вызывает желания помочь. Но я уже не знаю в чем проблема. Наведите на мысль)

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

Как создать словарь из строки

Для присваивания индексов к элементам коллекций удобно использовать функцию enumerate :

str1 = "Python" dic = print(dic) #

Отслеживать
ответ дан 20 авг 2021 в 13:02
77k 6 6 золотых знаков 56 56 серебряных знаков 123 123 бронзовых знака
В питоне походу при желании можно вообще любой код написать в одну строчку))
20 авг 2021 в 13:04
@denisnumb, 😀 В ответе strawdog еще проще сделано 🙂
20 авг 2021 в 13:05
Первый раз работаю с функцией enumerate. Спасибо за помощь!
20 авг 2021 в 13:23
@python_prog, пожалуйста 🙂
20 авг 2021 в 13:31

Я бы сделал так:

str1 = "Python" dic = <> for item, value in enumerate(str1): # item - индекс значения из строки(счет с 0), value - символ из str1 dic[item + 1] = value # ключ словаря - индекс + 1, значение ключа - символ строки print(dic) 

Отслеживать
ответ дан 20 авг 2021 в 13:06
Tehnorobot Tehnorobot
2,140 1 1 золотой знак 4 4 серебряных знака 13 13 бронзовых знаков

У меня почему-то цикл for с двумя аргументами не работала, но наверное у меня другая ошибка была, сейчас всё работает. Спасибо!

20 авг 2021 в 13:26
@python_prog наверно, просто, enumerate пропустили.
20 авг 2021 в 13:28

Можно сделать все куда проще 🙂

К отдельным буквам строки ‘Python’ можно обращаться по индексам, как у списков. Например, str1[0] будем иметь значение первой буквы, то есть ‘P’

Таким образом, в цикле for от 1 до len(str1)+1 (чтобы нумерация в словаре шла с единицы) заполняем словарь

Но поскольку нумерация символов str1 начинается с 0 , в каждой итерации при обращении к отдельной букве нам нужно вычесть 1 из i

str1 = "Python" dic = <> for i in range(1, len(str1)+1): dic[i] = str1[i-1] print(dic) 

Вывод:

Отслеживать
ответ дан 20 авг 2021 в 12:54
5,615 2 2 золотых знака 10 10 серебряных знаков 36 36 бронзовых знаков
Спасибо вам большое. Очень помогли! Не додумалась написать dic[i] = str1[i-1]. ☺
20 авг 2021 в 12:59
Кст, думаю, действительно лучше range(len(str)) , а вот в ключ записывать с +1
20 авг 2021 в 13:06
Да, пожалуй так
20 авг 2021 в 13:09

  • python
  • python-3.x
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.26.3951

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

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