2012-02-16 85 views
3

我有一个像串kwargs来kwargs

s = "title='bah' name='john and jill' purple='haze' none=None i=1" 

我找把该进的字典(并且不额外上白色空间呛溶液)的Python的方式串?

对此提出建议?

+0

您可能会有问题,如果键/值之一中有 – 2012-02-16 04:15:41

+0

它不会在“=”字符..我有过什么人使用的控制。 – Nix 2012-02-16 04:16:06

+3

如果你有'完全控制',那么你可以做'eval(“字典(%s)”%s.replace('',','))',但不要告诉任何人我告诉过你 – Doboy 2012-02-16 04:24:00

回答

-1

@gnibblers和@RanRag不BARF上的组合空白。 (例如标题=“富巴”)

s = "title='bah' name='john' purple='haze' none=None i=1" 
d = eval("dict(%s)"% ",".join(s)) 
+0

我(心)匿名倒票。有人可以向我解释为什么我可以修复吗? – Nix 2015-07-09 13:02:15

5
>>> 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'} 

(这不会工作,如果内字符串包含空格,或者如果'='显示为比键值分隔其他任何东西。显然更为复杂此得到越难解析,所以.. 。)

+0

Hey Nix ,这将是正确的做法。很简单。 – ericraio 2012-02-16 04:09:02

+0

不能导入AST这是python 2.5 – Nix 2012-02-16 15:17:16

2
>>> dictionary = {} 
>>> for i in s.split(): 
...  dictionary[i.split('=')[0]] = i.split('=')[1] 
... 
>>> dictionary 
{'purple': "'haze'", 'i': '1', 'none': 'None', 'name': "'john'", 'title': "'bah'"} 
+0

请注意。为什么downvote? – RanRag 2015-07-08 14:53:19

5

如果你有过琴弦的控制,因为你说你做什么,你可以简单地这样做

>>> 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'} 
>>> 
+0

不错的一个 - pythonic! – shahjapan 2012-02-16 04:39:05

+0

应该指出的是,这将改变参数与空格(''title ='foo bar'name ='john''' - >'{'name':'john','title':'foo,bar'} ')。 – yak 2012-02-16 07:26:48

+0

@yak这是真的,因此我不能使用这个... – Nix 2012-02-27 13:58:55