Python 为什么我的字典菜单没有出现?
我试图显示一组路由器的菜单,该菜单由一个字典描述,其中包含有关其状态的信息。为此,我有一个函数,它将包含设备信息的字典Python 为什么我的字典菜单没有出现?,python,json,dictionary,object,Python,Json,Dictionary,Object,我试图显示一组路由器的菜单,该菜单由一个字典描述,其中包含有关其状态的信息。为此,我有一个函数,它将包含设备信息的字典路由器作为输入。字典被转换成字典对象列表,称为router\u list,使用for循环,按设备名称的值排序。所有设备都保存在菜单\u text变量中,该变量反过来用于枚举和打印设备 运行此代码时,出现以下错误: python3 menu.py Traceback (most recent call last): File "menu.py", line 28, in &
路由器
作为输入。字典被转换成字典对象列表,称为router\u list
,使用for循环,按设备名称的值排序。所有设备都保存在菜单\u text
变量中,该变量反过来用于枚举和打印设备
运行此代码时,出现以下错误:
python3 menu.py
Traceback (most recent call last):
File "menu.py", line 28, in <module>
'password': '2020'
File "menu.py", line 6, in show_menu
router_list.append("%s. %s " % ((i+2), value['name'],))
TypeError: string indices must be integers
例如,您应该将词典列表传递给
show_menu()
路由器=[
{
“名称”:“cisco_ios”,
‘ip’:‘192.168.122.217’,
“用户名”:“管理员”,
“密码”:“2020”
},
]
显示菜单(路由器)
原因是,在
show_menu()
code中,您假设value
是一个字典,因此路由器的参数应该是一个字典列表。当使用enumerate()
在字典上循环时,您得到的是索引和键,而不是键和值。而且,value['name']
将导致错误,因为value
不代表字典,它是键(name
,ip
,在您的情况下,等等)
要在键/值对上循环,可以使用dict.items()
如下所示:
for k, v in dict.items():
print(k, v)
相关线程:
由于您只将一个路由器信息作为字典传递,即路由器
,因此不需要在其上循环以提取路由器的名称
您只需使用路由器['name']
就可以了
示例():
输出:
---------------------------------------------------------
0.EXIT
1.CONFIG ALL
2.cisco_ios
---------------------------------------------------------
---------------------------------------------------------
0.EXIT
1.CONFIG ALL
2. cisco_ios
3. cisco_ios_123
---------------------------------------------------------
但是,如果有多个路由器,那么您可以使用表示路由器的字典列表,并使用for
对其进行循环,如下所示():
输出:
---------------------------------------------------------
0.EXIT
1.CONFIG ALL
2.cisco_ios
---------------------------------------------------------
---------------------------------------------------------
0.EXIT
1.CONFIG ALL
2. cisco_ios
3. cisco_ios_123
---------------------------------------------------------
您打算使用多少路由器信息?菜单将只显示路由器的名称
,对吗?这是否回答了您的问题?这取决于环境,长官,实际上,我想用另一个函数,通过从列表菜单中选择一个数字,对拓扑结构进行一些配置。是的,我想你,但实际上,我想与另一个函数一起使用,通过从列表菜单中选择一个数字来指示哪些设备延迟响应。我不是很清楚你的需要,但是如果你想用一个号码来选择一个路由器,那么路由器字典的列表应该可以工作,因为列表索引可以与路由器号码相同。这是真的,但我必须列举这些dict用于selecting@AbdelhakBoumezrag:为什么?你是如何得到路由器信息字典的?如果有多个路由器,你会得到什么?一本包含所有路由器的字典?是这样吗?
---------------------------------------------------------
0.EXIT
1.CONFIG ALL
2. cisco_ios
3. cisco_ios_123
---------------------------------------------------------