У меня есть следующая строка:
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 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 не включает =. Идеи?
Обработка ошибок — это высокое искусство. Я бы, скорее всего, заменил x.split('=')
на функцию, выполняющую все необходимые действия по очистке.
Код:
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'}
Я могу поклясться, что видел это раньше, но используйте
dict(x.split('=') for x in mystring.split(','))
, чтобы разделить каждую подстроку на пару перед преобразованием вашей последовательности пар в словарь.