Python中嵌套字符串转元组

3
我的字符串长这样:
"('f', ('d', ('a', 'b')), 'g')"

我希望将其转换为元组。 如何做到这一点...我将在绘制树状图时使用它。
编辑: 附加说明: 我的代码和输出(print):
print type(myString)                     # <type 'str'>
print myString                           #('f',('d',('a','b')),'g')
myString = ast.literal_eval(myString)
print type(myString)                     #<type 'tuple'>
print myString                           #('f', ('d', ('a', 'b')), 'g')

for tuple in myString:                   #f
    print tuple                          #('d', ('a', 'b'))
                                         #g

那已经是一个元组了。你想做什么? - daknøk
2
也许他的意思是他的字符串实际上是 hisString = "('f', ('d', ('a', 'b')), 'g')". - Kache
编辑仍然没有清楚地表达你想要什么。你要求一个元组;你得到了一个元组。猜测一下,你想要将元组展开,即 ("f", "d", "a", "b", "g") - DSM
2个回答

7
你可以使用ast.literal_eval来实现这一点-例如:
>>> import ast
>>> s = "('f', ('d', ('a', 'b')), 'g')"
>>> ast.literal_eval(s)
('f', ('d', ('a', 'b')), 'g')

该函数的文档说明如下:
安全地评估表达式节点或包含Python表达式的字符串。提供的字符串或节点只能由以下Python文字结构组成:字符串,数字,元组,列表,字典,布尔值和None。
这可用于从不受信任的来源安全地评估包含Python表达式的字符串,而无需自己解析值。

@kache - 不,那是eval,而且能够做到这种事情的能力非常危险,这就是为什么你应该使用ast.literal_eval - Mark Reed

2
使用 ast.literal_eval 函数来实现。这样可以避免像使用 eval 函数一样运行一些恶意脚本。

如果我尝试这样做,我会得到 ('d',('a','b')) 作为一个元素。 - klonitklonit
@user1702981 请更具体地说明。展示你尝试的代码以及你想要它做的另一种方式。我们会提供帮助。 - ovgolovin
@user1702981 所以你要迭代你新生成的元组,并打印每个元素。第一个元素是 'f',当它被打印时,它是 f。第二个元素是元组,按原样打印。第三个元素是字符串,与第一个元素相同的方式打印。 - ovgolovin
如果您想将其打印为 f d a b g,那么您应该递归处理所有嵌套的元组。请将其作为一个单独的问题提出。 - ovgolovin
谢谢你的帮助...我之前认为将它转换为元组不行,但是现在当我尝试我的代码(绘制二叉树)时,它可以工作了...感谢@ovgolovin的回答。 - klonitklonit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接