Используйте словарные ключи в цикле FOR для определения списка - PullRequest
1 голос
/ 28 сентября 2019

Я пытаюсь указать список в цикле for, используя ключи из словаря, добавленные в строку.Позвольте мне объяснить:

site1_switches = {
    'visw0102' : {
        'device_type': 'hp_comware',
        'ip': '192.168.0.241',
        'username': 'admin',
        'password': 'password'
    },
    'visw0103' : {
        'device_type': 'hp_comware',
        'ip': '192.168.0.242',
        'username': 'admin',
        'password': 'password'
    },
    'visw0105' : {
        'device_type': 'hp_comware',
        'ip': '192.168.0.244',
        'username': 'admin',
        'password': 'password'
    }
}
uplinks_visw0102 = ['GigabitEthernet1/0/1','GigabitEthernet1/0/2']
uplinks_visw0103 = ['GigabitEthernet1/0/48']
uplinks_visw0105 = ['GigabitEthernet1/0/1','GigabitEthernet1/0/48']

for key, values in site1_switches.items():
    for port in ('uplinks_' + key):
        print(port)

Теперь это не весь сценарий, но это часть, в которой я застрял с элементами, необходимыми для его работы, как есть.

Я ожидал port содержать uplinks_visw010X в зависимости от того, где он находится в цикле.Вместо этого вот что я получаю:

>>> for key, values in site1_switches.items():
...     for port in ('uplinks_' + key):
...         print(port)
...
u
p
l
i
n
k
s
_
v
i
s
w
0
1
0
2
u
p
l
i
n
k
s
_
v
i
s
w
0
1
0
3
u
p
l
i
n
k
s
_
v
i
s
w
0
1
0
5
>>>

Кажется, что символ evey в port обрабатывается циклом, но это не то, что я хочу, чтобы он делал.

Как следуетkeys обработать для них, чтобы, в сочетании со строкой, выйти так, как я ожидаю (uplinks_visw010X).

Спасибо за помощь

1 Ответ

2 голосов
/ 28 сентября 2019

eval() это то, что вам нужно здесь.Функция eval позволяет программе Python запускать код Python внутри себя.Одним из полезных приложений eval () является оценка выражений Python из строки.
Вы можете обновить свой код, чтобы использовать eval(), например:

>>> for key, values in site1_switches.items():
...     for port in eval('uplinks_' + key):
...         print(port)
... 
GigabitEthernet1/0/1
GigabitEthernet1/0/2
GigabitEthernet1/0/48
GigabitEthernet1/0/1
GigabitEthernet1/0/48
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...