Python 将一组元组的字符串表示形式转换为字典

Python 将一组元组的字符串表示形式转换为字典,python,dictionary,eval,Python,Dictionary,Eval,我有一个表示一组元组的长字符串: my_string = '{(76034,0),(91316,0),(221981,768),(459889,0),(646088,0)}' 如何将其转换为以下命令 expected_result = {76034: 0, 91316: 0, 221981: 768, 459889: 0, 646088: 0} 您可以在python中使用eval将字符串转换为相应的数据类型 >>> a = '{(76034,0),(91316,0),(22

我有一个表示一组元组的长字符串:

my_string = '{(76034,0),(91316,0),(221981,768),(459889,0),(646088,0)}'
如何将其转换为以下命令

expected_result = {76034: 0, 91316: 0, 221981: 768, 459889: 0, 646088: 0}

您可以在python中使用
eval
将字符串转换为相应的数据类型

>>> a = '{(76034,0),(91316,0),(221981,768),(459889,0),(646088,0)}'
>>> eval(a)
set([(76034, 0), (459889, 0), (646088, 0), (221981, 768), (91316, 0)])
>>> 
您发布的是一个集合数据结构

或者,由于eval使用起来确实有风险,您应该像在其他答案中一样使用ast.literal\u eval。另请参见以下答案:[

因此,现在代码变成:

>>> import ast
>>> ast.literal_eval(a[1:-1])
((76034, 0), (91316, 0), (221981, 768), (459889, 0), (646088, 0))
>>> 

尝试使用
ast.literal\u eval

import ast
s = '{(76034,0),(91316,0),(221981,768),(459889,0),(646088,0)}'
print(dict(ast.literal_eval('[' + s.strip('{}') + ']')))
输出:

{76034: 0, 91316: 0, 221981: 768, 459889: 0, 646088: 0}

如果您对该字符串执行
literal\u eval
,它将返回一个集合。但是如果您想要一个
dict
,您可以使用
dict()将其转换为一个:


eval
是邪恶的。
In [1]: from ast import literal_eval

In [2]: s = '{(76034,0),(91316,0),(221981,768),(459889,0),(646088,0)}'

In [3]: literal_eval(s)
Out[3]: {(76034, 0), (91316, 0), (221981, 768), (459889, 0), (646088, 0)}

In [4]: conv_s = literal_eval(s)

In [5]: dict(conv_s)
Out[5]: {459889: 0, 646088: 0, 221981: 768, 91316: 0, 76034: 0}