Лучший способ создать dict из строки в Python

У меня есть следующая строка:

mystring = "freq1=440,freq2=425,freq3=410,freq4=0,freq5=0,freq6=0,freq7=0,freq8=0,freq9=0,freq10=0,freq11=0,freq12=0,freq13=0,freq14=0,freq15=0,freq16=0"

Я хотел бы создать из него словарь, чтобы я мог получить доступ к таким значениям, как mydict.freq1.

Я могу достаточно легко разбить строку:

splitstring = mystring.split(',')

Итак, я получаю:

freq1=410
freq2=425
freq3=410
freq4=0

Что кажется далеким от того, что мне нужно. Есть простой способ сделать это? В настоящее время я работаю на Python 2.7, но в конечном итоге работаю над переходом на 3.0.

Я могу поклясться, что видел это раньше, но используйте dict(x.split('=') for x in mystring.split(',')), чтобы разделить каждую подстроку на пару перед преобразованием вашей последовательности пар в словарь.

cs95 28.05.2019 05:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
57
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Код:

dict(x.split('=') for x in my_string.split(','))

Тестовый код:

my_string = "freq1=440,freq2=425,freq3=410,freq4=0,freq5=0,freq6=0,freq7=0,freq8=0,freq9=0,freq10=0,freq11=0,freq12=0,freq13=0,freq14=0,freq15=0,freq16=0"
my_dict = dict(x.split('=') for x in my_string.split(','))
print(my_dict)

Результаты:

{'freq1': '440', 'freq2': '425', 'freq3': '410', 'freq4': '0', 'freq5': '0', 'freq6': '0', 'freq7': '0', 'freq8': '0', 'freq9': '0', 'freq10': '0', 'freq11': '0', 'freq12': '0', 'freq13': '0', 'freq14': '0', 'freq15': '0', 'freq16': '0'}

Так что это сработало, однако, если строка имеет странное значение (например, «455, freq1 = 440, freq =, ...»), она выдает исключение. Я немного изменил код, чтобы отфильтровать пустые значения: filter(None, my_string.split(',')) но я не знаю, как лучше поступить в ситуации, когда x не включает =. Идеи?

MoreScratch 28.05.2019 16:21

Обработка ошибок — это высокое искусство. Я бы, скорее всего, заменил x.split('=') на функцию, выполняющую все необходимые действия по очистке.

Stephen Rauch 28.05.2019 16:25

Код:

mystring = "freq1=440,freq2=425,freq3=410,freq4=0,freq5=0,freq6=0,freq7=0,freq8=0 splitdic = {} for value in mystring.split(','): splitdic[value.split(" = ")[0]]=value.split(" = ")[1] print(splitdic)

Результат:

{'freq9': '0', 'freq8': '0', 'freq2': '425', 'freq5': '0', 'freq4': '0', 'freq6': '0', 'freq15': '0', 'freq1': '440', 'freq3': '410', 'freq11': '0', 'freq12': '0', 'freq16': '0', 'freq10': '0', 'freq13': '0', 'freq14': '0', 'freq7': '0'}

mystring = "freq1=440,freq2=425,freq3=410,freq4=0,freq5=0,freq6=0,freq7=0,freq8=0,freq9=0,freq10=0,freq11=0,freq12=0,freq13=0,freq14=0,freq15=0,freq16=0"
res= {i.split('=')[0]:i.split('=')[1] for i in mystring.split(',') }

print(res)

выход

{'freq1': '440', 'freq2': '425', 'freq3': '410', 'freq4': '0',
 'freq5': '0', 'freq6': '0', 'freq7': '0', 'freq8': '0', 'freq9': '0',
 'freq10': '0', 'freq11': '0', 'freq12': '0',
 'freq13': '0', 'freq14': '0', 'freq15': '0', 'freq16': '0'}

Другие вопросы по теме