在python中从字符串中提取变量

在python中从字符串中提取变量,python,string,Python,String,我有一个这样的字符串,我需要将y,x,z的值保存到3个浮点变量中。这三个数字的长度和符号不是常数 {'y': 0.02, 'x': -1.0188, 'z': 2.026} 建议?如果它真的是一个字符串,您可以使用json(或我不想建议的eval解析它): 如果它真的是一个字符串,您可以使用json(或者我不想建议使用eval解析它): 您可以简单地将其转换为像这样的dict,使用 输出 <type 'dict'> 您可以简单地将其转换为像这样的dict,使用 输出 <ty

我有一个这样的字符串,我需要将y,x,z的值保存到3个浮点变量中。这三个数字的长度和符号不是常数

{'y': 0.02, 'x': -1.0188, 'z': 2.026}

建议?

如果它真的是一个字符串,您可以使用json(或我不想建议的
eval
解析它):


如果它真的是一个字符串,您可以使用json(或者我不想建议使用
eval
解析它):


您可以简单地将其转换为像这样的
dict
,使用

输出

<type 'dict'>

您可以简单地将其转换为像这样的
dict
,使用

输出

<type 'dict'>

如其他答案中所述,将字符串转换为Python字典后,使用
json
ast
,可以将字典中的所有变量添加到全局变量中:

>>> data = {'y': 0.02, 'x': -1.0188, 'z': 2.026} # your parsed dictionary
>>> globals().update(data)
>>> print x
-1.0188
在这里,
globals()
为您提供一个包含所有全局定义的变量和函数的字典,使用
update
只需将
数据
字典中的名称和值添加到这些变量和函数中即可


如果你只有
x
y
z
这肯定是过分了,但是如果你在dict/字符串中有更多的变量,它会很方便,因为你不必对所有的变量都做
x=data[“x”]
。当然,您应该确保这些变量不会覆盖重要的内置函数和类似函数。

一旦您使用
json
ast
将字符串转换为Python字典,就可以将字典中的所有变量添加到全局变量中:

>>> data = {'y': 0.02, 'x': -1.0188, 'z': 2.026} # your parsed dictionary
>>> globals().update(data)
>>> print x
-1.0188
在这里,
globals()
为您提供一个包含所有全局定义的变量和函数的字典,使用
update
只需将
数据
字典中的名称和值添加到这些变量和函数中即可



如果你只有
x
y
z
这肯定是过分了,但是如果你在dict/字符串中有更多的变量,它会很方便,因为你不必对所有的变量都做
x=data[“x”]
。当然,您应该确保这些变量不会覆盖重要的内置函数和类似函数。

字符串?还是字典?如果你真的有这样一个字符串,我会说第一步是使用JSON或类似的东西将它解析到字典中?还是字典?如果你真的有这样一个字符串,我会说第一步是使用JSON或类似的东西将其解析到字典中。如果a={'y':0.02,'x':-1.0188,'z':2.026}var=[float(a[key])for key in a]如果这真的是字符串的样子,我认为
ast.literal\u eval
可能是最好的选择。可能,但是我总是对
eval
发痒,即使它是
literal
。我猜这是童年的创伤。好吧,就像恐惧一样,这是一个相当合理的创伤。更像是害怕在鲨鱼出没的水域附近游泳,而不是害怕水。如果这条绳子真的是这样的话,我认为
ast.literal\u eval
可能是最好的选择。可能吧,但我总是对
eval
感到痒,即使它是
literal
。我猜这是童年的创伤。好吧,就像恐惧一样,这是一个相当合理的创伤。更像是害怕在鲨鱼出没的水域附近游泳,而不是害怕水。但是,如果你这样做,你不能保证
x
对应于
'x'
<一个中的键的code>将以任意顺序在键上迭代。在这种情况下,他可以使用一个有序的字典。但是,如果你这样做,你不能保证
x
对应于
'x'
<对于a中的键,code>将以任意顺序迭代键。在这种情况下,他可以使用有序字典+1——我从来没有听说过该模块。@CodyPiersall试试这个。基本上,
literal\u eval
是对字符串进行literal求值,这就是为什么它能够检测到它在这里处理的是
dict
。你认为值得一提的是
literal\u eval
是安全的吗?这意味着它将只计算“字符串、数字、元组、列表、dicts、boolean和None”。(来自文档)@CodyPiersall包含对
ast.literal_eval的引用:)谢谢!这就是我要找的+1--我从来没有听说过那个模块。@CoDypiers都试试这个。基本上,
literal\u eval
是对字符串进行literal求值,这就是为什么它能够检测到它在这里处理的是
dict
。你认为值得一提的是
literal\u eval
是安全的吗?这意味着它将只计算“字符串、数字、元组、列表、dicts、boolean和None”。(来自文档)@CodyPiersall包含对
ast.literal_eval的引用:)谢谢!这就是我要找的!
print data['x'], data['y'], data['z']
>>> data = {'y': 0.02, 'x': -1.0188, 'z': 2.026} # your parsed dictionary
>>> globals().update(data)
>>> print x
-1.0188