¿Cómo usar dict.get() con dict multidimensional?

El método get() en python devuelve el valor de la clave si la clave está en el diccionario. Si la clave no está presente en un diccionario, devuelve Ninguno. También toma otro parámetro opcional que es el valor que se devolverá si la clave no se encuentra en un diccionario. 

Sintaxis: dict.get(clave, valor)

Aquí, la clave es un parámetro obligatorio, que es una clave cuyo valor queremos obtener de un diccionario. Y el valor es un campo opcional que es un valor que se devuelve cuando una clave específica no se encuentra en un diccionario. El valor predeterminado de valor es Ninguno.

Ejemplo 1:

Python3

# single dimension dictionary
d = {'jhon': 22, 'sanie': 34, 'munk': 19}
  
# return value if found if not then return Not found
print(d.get('sanie', 'Not found'))

Producción:

34

Ejemplo 2:

Ahora, veamos cómo usar dict.get() con un diccionario multidimensional. Para un diccionario multidimensional, usamos .get() varias veces en una sola instrucción. 

Python3

# Example of dict.get() with multidimensional dict
dict = {'India': {'captain': 'Virat', 'Batsman': 'Rohit', 
                  'Bolwer': 'Bumrah'},
        'England': {'captain': 'Root', 'Batsman': 'Buttler',
                    'Bolwer': 'anderson'},
        'Australia': {'captain': 'Paine', 'Batsman': 'Warner',
                      'Bolwer': 'Starck'},
        'Pakistan': {'captain': 'Babar', 'Batsman': 'Hafiz',
                     'Bolwer': 'Aamir'},
        'West Indies': {'captain': 'Pollard', 'Batsman': 'Gayle',
                        'Bolwer': 'Narayan'}
        }
  
# find batsman for india
# return Not Found if not exists in dict
print(dict.get('India').get('Batsman', 'Not Found'))

Producción:

Rohit

Ejemplo 3:

Puede ver que da la salida correcta. Entendamos el funcionamiento de este dict.get(). Primero, dict.get() devuelve todos los valores de la clave ‘India’, que es un diccionario. devuelve {‘captain’:’Virat’,’Batsman’:’Rohit’,’Bolwer’:’Bumrah’} ahora para este diccionario usamos de nuevo el método get() para encontrar valor. Entonces, para ‘Batsman’, vuelve a ejecutar ‘Rohit’.

Python3

# Example of dict.get() with multidimensional dict
dict = {'India': {'captain': 'Virat', 'Batsman': 'Rohit', 
                  'Bolwer': 'Bumrah'},
        'England': {'captain': 'Root', 'Batsman': 'Buttler',
                    'Bolwer': 'anderson'},
        'Australia': {'captain': 'Paine',
                      'Batsman': 'Warner', 'Bolwer': 'Starck'},
        'Pakistan': {'captain': 'Babar', 'Batsman': 'Hafiz', 
                     'Bolwer': 'Aamir'},
        'West Indies': {'captain': 'Pollard', 'Batsman': 'Gayle', 
                        'Bolwer': 'Narayan'}
        }
  
# find fielder for india
# return Not Found if not exists in dict
print(dict.get('India').get('Fielder', 'Not Found'))

Producción:

Not Found

Ejemplo 4:

Puede ver que fielder no existe en un diccionario devuelto por ‘India’. Y es por eso que da ‘No encontrado’ como salida. Pero hay un problema al usar este método get(). Si no se encuentra el valor correspondiente a la primera clave, devolverá una string y el segundo método get() se aplicará a la string. Entonces esto dará un error ya que dict.get() es un método para el diccionario, no para la string. 

Python3

# Example of dict.get() with multidimensional dict
dict = {'India': {'captain': 'Virat', 'Batsman': 'Rohit',
                  'Bolwer': 'Bumrah'},
        'England': {'captain': 'Root', 'Batsman': 'Buttler', 
                    'Bolwer': 'anderson'},
        'Australia': {'captain': 'Paine', 'Batsman': 'Warner', 
                      'Bolwer': 'Starck'},
        'Pakistan': {'captain': 'Babar', 'Batsman': 'Hafiz',
                     'Bolwer': 'Aamir'},
        'West Indies': {'captain': 'Pollard', 'Batsman': 'Gayle',
                        'Bolwer': 'Narayan'}
        }
  
# find batsman for new zealand
# return Not Found if not exists in dict
# if new zealand not found in dict will result in error
print(dict.get('new zealand').get('Batsman', 'Not Found'))

Producción:

Traceback (most recent call last):
  File "/home/4deb2392dee0ab15dec836bca68a69e2.py", line 12, in <module>
    print(dict.get('new zealand').get('Batsman', 'Not Found'))
AttributeError: 'NoneType' object has no attribute 'get'

Esto da el error de objeto ‘NoneType’ ya que el tipo de datos de string no tiene un método llamado get(). Entonces, para resolver este error, usaremos el segundo parámetro del método get() que es para la salida predeterminada si la clave no se encuentra en un diccionario. Devolveremos un diccionario vacío si no existe una clave en el diccionario.

Python3

# Example of dict.get() with multidimensional dict
dict = {'India': {'captain': 'Virat', 'Batsman': 'Rohit', 
                  'Bolwer': 'Bumrah'},
        'England': {'captain': 'Root', 'Batsman': 'Buttler',
                    'Bolwer': 'anderson'},
        'Australia': {'captain': 'Paine', 'Batsman': 'Warner',
                      'Bolwer': 'Starck'},
        'Pakistan': {'captain': 'Babar', 'Batsman': 'Hafiz',
                     'Bolwer': 'Aamir'},
        'West Indies': {'captain': 'Pollard', 'Batsman': 'Gayle',
                        'Bolwer': 'Narayan'}
        }
  
# find batsman for new zealand
# return Not Found if not exists in dict
print(dict.get('new zealand',{}).get('Batsman', 'Not Found'))

Producción:

Not Found

En el resultado, puede ver que esto funciona perfectamente incluso si la primera clave no se encuentra en un diccionario. También usaremos el mismo enfoque para dimensiones más altas. Ahora veamos si podemos usar esto para dimensiones más altas. 

Python3

# use of dict.get() in multidimensional dictionary
  
dict = {'emp1': {'Name': {'First Name': 'Joe', 
                          'Last Name': 'tribiani'}, 
                 'age': 32},
        'emp2': {'Name': {'First Name': 'Mark',
                          'Last Name': 'Adam'},
                 'age': 20},
        'emp3': {'Name': {'First Name': 'luci', 
                          'Last Name': 'truk'},
                 'age': 47},
        }
  
# return Not Found if emp2 is not found
# or Name is not Found or Last name is not found
print(dict.get('emp2', {}).get('Name', {}).get('Last Name',
                                               'Not Found'))

Producción:

Adam

Así que esto funciona perfectamente. podemos usar esto para cualquier dimensión. Simplemente agregue el diccionario como valor de retorno predeterminado si la clave no se encuentra en un diccionario. Agregue el diccionario como valor de retorno predeterminado, excepto por el último método get(), de lo contrario, generará un diccionario vacío. Agregue cualquier string en el último método get() que desee mostrar si no se encuentra el valor.

Publicación traducida automáticamente

Artículo escrito por rushi_javiya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *