tipo - Python: cómo verificar si existen claves y recuperar el valor del diccionario en prioridad descendente
objeto tipo diccionario python (3)
Tengo un diccionario y me gustaría obtener algunos valores de él basados en algunas teclas. Por ejemplo, tengo un diccionario para usuarios con su nombre, apellido, nombre de usuario, dirección, edad, etc. Digamos, solo quiero obtener un valor (nombre), ya sea apellido o nombre o nombre de usuario, pero en prioridad descendente como se muestra a continuación
(1) apellido: si existe una clave, obtenga valor y deje de verificar. Si no, pase a la siguiente tecla.
(2) primer nombre: si existe una clave, obtenga valor y deje de verificar. Si no, pase a la siguiente tecla.
(3) nombre de usuario: si existe una clave, obtenga un valor o devuelva nulo / vacío
#my dict looks something like this
myDict = {''age'': [''value''], ''address'': [''value1, value2''],
''firstName'': [''value''], ''lastName'': ['''']}
#List of keys I want to check in descending priority: lastName > firstName > userName
keySet = [''lastName'', ''firstName'', ''userName'']
Lo que intenté hacer es obtener todos los valores posibles y colocarlos en una lista para poder recuperar el primer elemento de la lista. Obviamente no funcionó.
tempList = []
for key in keys:
get_value = myDict.get(key)
tempList .append(get_value)
¿Hay una mejor manera de hacer esto sin usar, si no bloquear?
También puede usar myDict.has_key(keyname)
para validar si existe la clave.
Edición basada en los comentarios -
Esto funcionaría solo en versiones inferiores a 3.1. has_key
se ha eliminado de Python 3.1. Debería usar el operador in
si está usando Python 3.1
Una opción si el número de claves es pequeño es usar las funciones encadenadas:
value = myDict.get(''lastName'', myDict.get(''firstName'', myDict.get(''userName'')))
Pero si tiene definido KeySet, esto podría ser más claro:
value = None
for key in keySet:
if key in myDict:
value = myDict[key]
break
Los get
s encadenados no provocan cortocircuitos, por lo que se comprobarán todas las claves pero solo se usará una. Si tiene suficientes claves posibles que importan, use el bucle for
.
Use .get()
, que si no se encuentra la clave, devuelve None
.
for i in keySet:
temp = myDict.get(i)
if temp is not None:
print temp
break