所以在我的算法中我使用变量来存储一些图形节点。但我想把它作为用户输入。
parents = {'N1': ['N2', 'N3', 'N4'], 'N3': ['N6', 'N7'], 'N4': ['N3'], 'N5': ['N4', 'N8'], 'N6': ['N13'], 'N8': ['N9'], 'N9': ['N11'], 'N10': ['N7', 'N9'], 'N11': ['N14'], 'N12': ['N5']}
上面的代码应如下所示:
parents = list(input("Enter vertices:"))
但这只列出一个清单。我需要一份清单。
答案 0 :(得分:0)
您可以使用ast
模块的literal_eval
将表示Python文字的字符串转换为适当的Python对象。来自文档:
安全地评估表达式节点或包含Python的字符串 文字或容器显示。提供的字符串或节点可能只是 由以下Python文字结构组成:字符串,字节, 数字,元组,列表,dicts,集合,布尔值和无。
这可以用于安全地评估包含Python的字符串 来自不受信任来源的值,无需解析值 自己。它无法评估任意复杂性 表达式,例如涉及运算符或索引。
from pprint import pprint
from ast import literal_eval
s = "{'N1': ['N2', 'N3', 'N4'], 'N3': ['N6', 'N7'], 'N4': ['N3'], 'N5': ['N4', 'N8'], 'N6': ['N13'], 'N8': ['N9'], 'N9': ['N11'], 'N10': ['N7', 'N9'], 'N11': ['N14'], 'N12': ['N5']}"
parents = literal_eval(s)
pprint(parents)
<强>输出强>
{'N1': ['N2', 'N3', 'N4'],
'N10': ['N7', 'N9'],
'N11': ['N14'],
'N12': ['N5'],
'N3': ['N6', 'N7'],
'N4': ['N3'],
'N5': ['N4', 'N8'],
'N6': ['N13'],
'N8': ['N9'],
'N9': ['N11']}
还有一个名为eval
的内置函数可以执行此操作,但您应该从不在不受信任的用户输入上使用eval
,因为这不安全。
以下是如何在用户输入上使用literal_eval
:
from pprint import pprint
from ast import literal_eval
s = input('Enter a node dictionary: ')
parents = literal_eval(s)
pprint(parents)
<强>演示强>
Enter a node dictionary: {'N1': ['N2', 'N3', 'N4'], 'N3': ['N6', 'N7'], 'N4': ['N3'], 'N5': ['N4', 'N8'], 'N6': ['N13'], 'N8': ['N9'], 'N9': ['N11'], 'N10': ['N7', 'N9'], 'N11': ['N14'], 'N12': ['N5']}
{'N1': ['N2', 'N3', 'N4'],
'N10': ['N7', 'N9'],
'N11': ['N14'],
'N12': ['N5'],
'N3': ['N6', 'N7'],
'N4': ['N3'],
'N5': ['N4', 'N8'],
'N6': ['N13'],
'N8': ['N9'],
'N9': ['N11']}