valores tipo programacion obtener objeto llenar for ejercicios diccionarios diccionario con como cargar python dictionary key-value

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