Skip to content Skip to sidebar Skip to footer

Get Index Name Of A List Made From Dictionaries

I want to begin by saying that I am by no mean a python expert so I am sorry if I express myself in an incorrect way. I am building a script that goes something like this: from net

Solution 1:

Have you considered using a nested dictionary?

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'
}}

for key, value in site1_switches.items():
  print (key)
  # output
  visw0102
  visw0103

Here's another way to accomplish this.

for index, (key, value) in enumerate(site1_switches.items()):
  print(index, key, value)
  # output
  0 visw0102 {'device_type': 'hp_comware', 'ip': '192.168.0.241', 'username': 'admin', 'password': 'password'}
  1 visw0103 {'device_type': 'hp_comware', 'ip': '192.168.0.242', 'username': 'admin', 'password': 'password'}

A more complete solution

from netmiko import ConnectHandler 

# nested dictionary
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'
}}

for key, values in site1_switches.items():
  device_type = values.get('device_type', {})
  ip_address = values.get('ip', {})
  username = values.get('username', {})
  password = values.get('password', {})
  print (f'{key}', {device_type}, {ip_address}, {username}, {password})
  # output 
  visw0102 {'hp_comware'} {'192.168.0.241'} {'admin'} {'password'}
  visw0103 {'hp_comware'} {'192.168.0.242'} {'admin'} {'password'}

  print (f'Establishing a connection to {key}')
  # output 
  Establishing a connection to visw0102

  # pseudo code based on ConnectHandler parameters
  switch_connect = ConnectHandler(device_type=device_type, host=ip_address, username=username, password=password)

  # checking that the connection has a prompt 
  switch_connect.find_prompt()

  # What you want to do goes here...
  # Example
  command_output = switch_connect.send_command('display current-configuration')

Solution 2:

Unfortunately, there doesn't seem to be a nice, succinct way of accessing the dictionary's name, but Get name of dictionary provides some possible workarounds:

Nesting your switch dictionaries within an overarching dictionary that maps names to dictionaries is one method.

site1_switches = {
    "visw0102": visw0102, 
    "visw0103": visw0103
}

Another would be to add a "name" key to each dictionary, so that you can access the names of each switch in site1_switches by switch['name']

visw0102 = {
    'name': 'visw0102',
    'device_type': 'hp_comware',
    'ip': '192.168.0.241',
    'username': 'admin',
    'password': 'password'
}

visw0103 = {
    'name': 'visw0103',
    'device_type': 'hp_comware',
    'ip': '192.168.0.242',
    'username': 'admin',
    'password': 'password'
}

Post a Comment for "Get Index Name Of A List Made From Dictionaries"