Зацикливая словарь с помощью enumerate()
, вы получаете индекс и ключ, а не ключ и значение. И, value['name']
приведет к ошибке, поскольку value
не представляет словарь, это ключ (name
, ip
, и т. Д. c. В вашем случае).
Для циклического перебора пары ключ / значение вы можете использовать dict.items()
следующим образом:
for k, v in dict.items():
print(k, v)
Соответствующий поток: enumerate () для словаря в python
Поскольку вы передаете в качестве словаря только одну информацию о маршрутизаторе, т.е. routers
, вам не нужно указывать l oop поверх него, чтобы извлечь имя маршрутизатора.
Вы можете просто использовать routers['name']
и все готово!
Пример ( live ):
def show_menu(routers):
print(("""
---------------------------------------------------------
0.EXIT
1.CONFIG ALL
2."""+ routers['name'] +"""
---------------------------------------------------------
"""))
if __name__ == '__main__':
show_menu({
'name': 'cisco_ios',
'ip': '192.168.122.217',
'username': 'admin',
'password': '2020'
})
Вывод:
---------------------------------------------------------
0.EXIT
1.CONFIG ALL
2.cisco_ios
---------------------------------------------------------
Но, если есть Если вы используете несколько маршрутизаторов, то вы можете использовать список словарей, обозначающих маршрутизаторы и l oop поверх него, используя for
, например: ( live ):
def show_menu(routers):
router_list = []
i = 0
for router in routers:
router_list.append("%s. %s " % ((i+2), router['name'],))
i = i + 1
menu_text = '\n'.join(router_list)
print(("""
---------------------------------------------------------
0.EXIT
1.CONFIG ALL
"""+ menu_text +"""
---------------------------------------------------------
"""))
if __name__ == '__main__':
show_menu([{
'name': 'cisco_ios',
'ip': '192.168.122.217',
'username': 'admin',
'password': '2020'
},
{
'name': 'cisco_ios_123',
'ip': '192.168.xxx.xxx',
'username': 'admin',
'password': '2021'
}
])
Вывод:
---------------------------------------------------------
0.EXIT
1.CONFIG ALL
2. cisco_ios
3. cisco_ios_123
---------------------------------------------------------