从字符串转换为python字典?

从字符串转换为python字典?,python,serialization,eval,yaml,dictionary,Python,Serialization,Eval,Yaml,Dictionary,如果我喜欢 "{ partner_name = test_partner}" OR " { partner_name : test_partner } 它是一个非常复杂的示例字符串,包含一些特殊字符,如=,[,],{,} 将其转换为python对象的最佳方式是什么?这样我就可以处理它了 我尝试使用eval,但它要求字符串使用“'”,但是我们如何在每个单词的开头和结尾之前添加这个特殊字符\',我尝试了正则表达式re.findal('\w+'),但当我的字符串包含“\u1”或类似字符时失败,因为它

如果我喜欢

"{ partner_name = test_partner}" OR " { partner_name : test_partner }
它是一个非常复杂的示例字符串,包含一些特殊字符,如=,[,],{,}

将其转换为python对象的最佳方式是什么?这样我就可以处理它了

我尝试使用eval,但它要求字符串使用“'”,但是我们如何在每个单词的开头和结尾之前添加这个特殊字符\',我尝试了正则表达式re.findal('\w+'),但当我的字符串包含“\u1”或类似字符时失败,因为它将以“\u2”分隔字符串

这个问题的目标是我的应用程序需要,用户友好的语言作为输入-我认为Json Dict会很好-但用户懒得在每个字符串的前后加上“'”


然后我想到了yaml,但它也很复杂,如果有人能建议更好的用户友好输入,我将其用作python对象,那么请帮助我解决问题。

修复输入将是最好的解决方案

但是您可以跳过一系列的障碍,尝试通过
json
进行输入。这是很脆弱的,因为您的输入不完全是json,分散的输入可能很容易破坏这一点(尽管我仍然倾向于使用
eval


修正输入是最好的解决方案

但是您可以跳过一系列的障碍,尝试通过
json
进行输入。这是很脆弱的,因为您的输入不完全是json,分散的输入可能很容易破坏这一点(尽管我仍然倾向于使用
eval

编辑

你可以用

>>重新导入
>>>m=re.match(r“(?P\w+)=(?P\w+),“foo=bar”)
>>>m.groupdict()
{'partner_name':'foo','test_partner':'bar'}
>>> 

编辑

你可以用

>>重新导入
>>>m=re.match(r“(?P\w+)=(?P\w+),“foo=bar”)
>>>m.groupdict()
{'partner_name':'foo','test_partner':'bar'}
>>> 

如果是一些外部数据,请不要在其上使用
eval()!如果您想正确地解析它,请查看一些解析库。使用解析组合符的方法非常好-例如,或者可能是peg解析器:

如果是一些外部数据,请不要在其上使用
eval()
!如果您想正确地解析它,请查看一些解析库。使用解析组合符的方法非常好——例如,或者可能是peg解析器:

如果YAML对于用户来说太复杂,您可能应该考虑给他们一个结构化的输入表单,并从中正确格式化数据。YAML在指定结构方面非常容易编写,当然比大括号语法容易。

如果YAML对用户来说太复杂,您可能应该考虑给他们一个结构化的输入表单,并从中正确格式化数据。YAML在指定结构时非常容易编写,当然比大括号语法更容易。

您可以替换或删除任何不需要的字符

>>> s
'{ partner_name = test_partner }'
>>> s = ''.join([c for c in s.replace('=', ':') if not c in '\ {}'])
>>> s
'partner_name:test_partner'
然后将字符串一分为二以创建dict

>>> dict([s.split(':')])
{'partner_name': 'test_partner'}
或更新

>>> your_dict.update([s.split(':')])

您可以替换或删除任何不需要的字符

>>> s
'{ partner_name = test_partner }'
>>> s = ''.join([c for c in s.replace('=', ':') if not c in '\ {}'])
>>> s
'partner_name:test_partner'
然后将字符串一分为二以创建dict

>>> dict([s.split(':')])
{'partner_name': 'test_partner'}
或更新

>>> your_dict.update([s.split(':')])

literal\u eval只是eval的一个安全版本,我的问题仍然是问题,用户不想在单词的每个开头和结尾都添加刺痛文字。literal\u eval只是eval的一个安全版本,我的问题仍然是问题,用户不希望在单词的每个开头和结尾都添加sting文本。Pyparsing不再托管在wikispaces.com上。转到wikispaces.com上不再承载Pyparsing。去