У меня есть строка, какстроки kwargs к kwargs
s = "title='bah' name='john and jill' purple='haze' none=None i=1"
Ищу для вещего способа положить, что в словарь (и решение, которое не давится дополнительные пробела)?
Предложения?
У меня есть строка, какстроки kwargs к kwargs
s = "title='bah' name='john and jill' purple='haze' none=None i=1"
Ищу для вещего способа положить, что в словарь (и решение, которое не давится дополнительные пробела)?
Предложения?
сочетание @gnibblers и @RanRag, не блевать на пробельные. (Например, название = «Foo бар»)
s = "title='bah' name='john' purple='haze' none=None i=1"
d = eval("dict(%s)"% ",".join(s))
I (heart) анонимный голос. Может кто-нибудь объяснить мне, почему я могу исправить? – Nix
>>> from ast import literal_eval
>>> s = "title='bah' name='john' purple='haze' none=None i=1"
>>> dict((k, literal_eval(v)) for k, v in (pair.split('=') for pair in s.split()))
{'purple': 'haze', 'i': 1, 'none': None, 'name': 'john', 'title': 'bah'}
(Это не будет работать, если внутренние строки содержат пробелы, или если '='
появляется как угодно, кроме сепаратора ключ-значение. Очевидно, что чем сложнее это становится тем труднее разобрать, так что .. .)
>>> dictionary = {}
>>> for i in s.split():
... dictionary[i.split('=')[0]] = i.split('=')[1]
...
>>> dictionary
{'purple': "'haze'", 'i': '1', 'none': 'None', 'name': "'john'", 'title': "'bah'"}
Обратите внимание. Почему нисходящий? – RanRag
Если у вас есть контроль над строками, как вы говорите, что вы делаете, вы могли бы просто сделать это
>>> s = "title='bah' name='john' purple='haze' none=None i=1"
>>> eval("dict(%s)"%s.replace(" ",","))
{'i': 1, 'purple': 'haze', 'none': None, 'name': 'john', 'title': 'bah'}
>>>
Вас могут возникнуть проблемы, если один из ключей/значений имеет «=» символ в нем –
Это обыкновение .. я иметь контроль над тем, что люди используют. – Nix
, если у вас есть «полный контроль», вы можете сделать 'eval (« dict (% s) »% s.replace ('', ','))', но не говорите никому, я вам говорил, что – Doboy