Los Diccionarios tambien llamados matrices asociativas , ya que son colecciones que contiene clave:valor ejemplo:
>>>diccionario = {"enero":1,"febrero":2,"marzo":3}
>>>diccionario
{'enero': 1, 'marzo': 3, 'febero': 2}
En la parte de la clave podemos usar cualquier tipo de valor inmutable: numeros, candenas, booleanos o tuplas menos listas o diccionarios dado que son mutables. La difrencia que existe entre diccionarios con la listas o las tuplas es que los valores almacenados en el diccionario no se le accede a traves de su indice si no atraves de su clave utilizando el operador de [] asi que de esta forma nuestros diccionarios no tienen un orden prestablecido :|
>>>diccionario["enero"]
1
de esta misma manera podemos modificar valores
>>>diccionario["enero"]=2
>>>diccionario["enero"]
2
lo dejamos como estaba
>>>diccionario["enero"]=1
>>>diccionario["enero"]
1
bueno en los diccionarios no se usa el slicing, entre otras cosa ya que los diccionarios no son secuencia, sino Mappings (mapeados, asociaciones)
FUNCIONES BASICAS :
True
ahora probemos la funcion has_key(k) en python 3.x
>>>diccionario.has_key('febrero')
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'dict' object has no attribute 'has_key'
como podemos comprobar la funcion has_key fue eliminada de python 3.x pero de igual forma contamos con >>>"enero" in diccionario para saber si se encuentra una clave de un diccionario :)
get(k[, d]) Busca el valor de la clave k en el diccionario. Es equivalente a utilizar D[k] pero al utilizar este método podemos indicar un valor a devolver por defecto si no se encuentra la clave, mientras que con la sintaxis D[k], de no existir la clave se lanzaría una excepción veamos:
>>>diccionario.get("marzo")
3
esto tambien lo podiamos averiguar de la froma D[k]
>>>diccionario["marzo"]
3
la ventaja de la funcion get(k[, d]) es que podemos indicar un valor a devolver si la clave no esta:
>>>diccionario.get("abril","valor no encontrado de la clave dada")
>>>'valor no encontrado de la clave dada'
bueno ahi defini un mensaje personalizado pero puede ser tambien que devuelva un entero o una lista etc.
items() Devuelve una lista de tuplas con pares clave-valor.
python 2.x
>>> diccionario.items()
[('enero', 2), ('marzo', 3), ('febero', 2)]
python 3.x
>>> list[diccionario.items()]
[('enero', 2), ('marzo', 3), ('febero', 2)]
como ven el resutado devuelto es una lista [(clave:valor),......]
keys() Devuelve una lista de las claves del diccionario.
python 2.x
>>>diccionario.keys()
['enero', 'marzo', 'febero']
python 3.x
>>>list(diccionario.keys())
['enero', 'marzo', 'febero']
values() Devuelve una lista de los valores del diccionario.
python 2.x
>>> diccionario.values()
[2, 3, 2]
python 3.x
>>> list(diccionario.values())
[2, 3, 2]
equivalente tanto para python 2.x como 3.x
>>> diccionario.pop("enero")
2
>>>diccionario
{'marzo': 3, 'febero': 2}
tambien podemos hacer esto y es equivalentes tanto Python 2.x y 3.x:
del diccionario ["marzo"]
>>>diccionario
{'febero': 2}
si queremos eliminar todos los elemntod del dicionario tan solo hacemos:
>>>diccionario.clear()
{ }
FUNCIONES BASICAS :
has_key(k) Comprueba si el diccionario tiene la clave k. Es equivalente a la sin-
taxis k in D.
valido en python 2.x veamos:
>>>diccionario.has_key("enero")
True
>>> "enero" in diccionariotaxis k in D.
valido en python 2.x veamos:
>>>diccionario.has_key("enero")
True
si la clave enero se encuentra en nuestro diccionario nos devuelve True en caso contrario False, una equivalencia de esto seria:
>>> "enero" in diccionario
True
Debido a esta equivalencia este metodo se convertio en algo redundante producinedo una ambiguedad innecesaria, debido a esto la funcion D.has_key(k) fue eliminada de Python 3.x veamos:
valido solo en python 3.x
>>> "enero" in diccionario
True
Debido a esta equivalencia este metodo se convertio en algo redundante producinedo una ambiguedad innecesaria, debido a esto la funcion D.has_key(k) fue eliminada de Python 3.x veamos:
valido solo en python 3.x
True
ahora probemos la funcion has_key(k) en python 3.x
>>>diccionario.has_key('febrero')
Traceback (most recent call last):
File "
AttributeError: 'dict' object has no attribute 'has_key'
como podemos comprobar la funcion has_key fue eliminada de python 3.x pero de igual forma contamos con >>>"enero" in diccionario para saber si se encuentra una clave de un diccionario :)
get(k[, d]) Busca el valor de la clave k en el diccionario. Es equivalente a utilizar D[k] pero al utilizar este método podemos indicar un valor a devolver por defecto si no se encuentra la clave, mientras que con la sintaxis D[k], de no existir la clave se lanzaría una excepción veamos:
>>>diccionario.get("marzo")
3
esto tambien lo podiamos averiguar de la froma D[k]
>>>diccionario["marzo"]
3
>>>diccionario.get("abril","valor no encontrado de la clave dada")
>>>'valor no encontrado de la clave dada'
bueno ahi defini un mensaje personalizado pero puede ser tambien que devuelva un entero o una lista etc.
items() Devuelve una lista de tuplas con pares clave-valor.
python 2.x
>>> diccionario.items()
[('enero', 2), ('marzo', 3), ('febero', 2)]
python 3.x
>>> list[diccionario.items()]
[('enero', 2), ('marzo', 3), ('febero', 2)]
como ven el resutado devuelto es una lista [(clave:valor),......]
keys() Devuelve una lista de las claves del diccionario.
python 2.x
>>>diccionario.keys()
['enero', 'marzo', 'febero']
python 3.x
>>>list(diccionario.keys())
['enero', 'marzo', 'febero']
values() Devuelve una lista de los valores del diccionario.
python 2.x
>>> diccionario.values()
[2, 3, 2]
python 3.x
>>> list(diccionario.values())
[2, 3, 2]
pop(k[, d]) Borra la clave k del diccionario y devuelve su valor. Si no se encuentra dicha clave se devuelve d si se especificó el parámetro o bien se lanza una excepción.
equivalente tanto para python 2.x como 3.x
>>> diccionario.pop("enero")
2
>>>diccionario
{'marzo': 3, 'febero': 2}
tambien podemos hacer esto y es equivalentes tanto Python 2.x y 3.x:
del diccionario ["marzo"]
>>>diccionario
{'febero': 2}
si queremos eliminar todos los elemntod del dicionario tan solo hacemos:
>>>diccionario.clear()
{ }
si se fijaron bien los metodos keys(), values() y items() de un diccionario devolvían listas en key() devolvia una lista de las claves de un diccionario, de values() devolvia una lista de los valores de un diccionario y items() devolvia una lista con clave:valor del diccionario osea el diccionario completo pero en una lista, cada una de esas funciones tiene una funcion analoga que serian:
keys() analoga iterkeys()
values() analoga itervalues()
items() analoga iteritems()
estas funciones analogas devuelven iteradores sobre la misma secuencia que las anteriores, esto de los iteradores lo explicare con mas detalle mas adelante.
tambien se fijaron que en python 3.x hacemos en algunas funciones el llamados de list list(diccionario.values()) para imprimir los datos buen es que en python 3 se introduce un concepto llamado vista y vamos a tratar de ver las ventajas que trae esto contra versiones anteriores de python 3.x ya que cuando hacemos diccionario.keys() en python3 obtengo es la vista del diccionario veamos:
python 3.x
>>>d=diccionario.keys() #obtengo la vista del diccionario
>>>type(v)
class 'dict_keys'
como ves es de tipo
class 'dict_keys'
>>> iterador= iter(v) # construyo un iterador a partir de la vista (no del dict!) >>> keys = list(v) # construyo una lista a partir de la vista
como ves es por eso que en python 3.x construimos la lista a partir de la vista si estamos en una version de python 2.x los iteradores lo conseguiamos de las funciones homologas (iterkeys(),iteritems() y itervalues() ) y en python 3.x solo con la funcion iter iterador= iter(v)
veamos con un ejemplo el concepto de vista para Python 3.x y su funcion iter() que su proposito puede ser mas para compatibilidad hacia atras con versiones previs a python 3.x
diccionario de ejemlo:
>>>dic={"guido":"python","linus":"linux","richard":"gnu"}
python 2.x
>>>iterador=dic.iterkeys()
ahora borremos un elemento del diccionario:
>>>del(dic["linus"])
ahora iteramos:
>>>for key in iterador:
.... print key
....
Traceback (most recent call last):
File "", line 1, in
NameError: name 'iterador' is not defined
bueno nos genera un error ya que nuestro iterador tiene un diccionario definido y al modificarlo
ya no podemos iterarlo osea recorrerlo con el for :( y ahi es donde entra el concepto de vista con python3 porque las vista son iterables :) veamos:
python 3.x
>>>dic={"guido":"python","linus":"linux","richard":"gnu"}
obtenemos la vista:
>>> vista=dic.keys()
ahora borremos un elemento del diccionario
>>>del(dic["linus"])
ahora iteramos con la vista:
>>>for key in vista:
.... print (key)
....
guido
richard
si en python 3.x hubieramos obtenido el iterador atraves de la funcion iter() asi iterador=iter(dic.keys()) si hacemos asi en python 3 tendriamos un comportamiento similar a Python 2.x y es el de que ese iterador no soporta modificacion durante la ejecucion.
Bueno creo que con lo que llevamos hasta aqui de python que son los tipos de datos operadores, listas, tuplas y diccionarios que era algo fundamental antes de iniciar con funciones, sentencias condicionales y bucles, que lo veremos ya en el proximo post. vamos despacios porque con el lanzamiento de python3 en cada tema vamos mostrando como se hace en python 2.x y ahora como se hace en python 3.x bueno no es todo pero donde hallan cambios lo ire indicando para que los que andan practicando vean el porque de las excepciones que nos arroja, bueno cualquier duda me la hacen saber bye.
Write By Hackchan
keys() analoga iterkeys()
values() analoga itervalues()
items() analoga iteritems()
estas funciones analogas devuelven iteradores sobre la misma secuencia que las anteriores, esto de los iteradores lo explicare con mas detalle mas adelante.
tambien se fijaron que en python 3.x hacemos en algunas funciones el llamados de list list(diccionario.values()) para imprimir los datos buen es que en python 3 se introduce un concepto llamado vista y vamos a tratar de ver las ventajas que trae esto contra versiones anteriores de python 3.x ya que cuando hacemos diccionario.keys() en python3 obtengo es la vista del diccionario veamos:
python 3.x
>>>d=diccionario.keys() #obtengo la vista del diccionario
>>>type(v)
class 'dict_keys'
como ves es de tipo
class 'dict_keys'
>>> iterador= iter(v) # construyo un iterador a partir de la vista (no del dict!) >>> keys = list(v) # construyo una lista a partir de la vista
como ves es por eso que en python 3.x construimos la lista a partir de la vista si estamos en una version de python 2.x los iteradores lo conseguiamos de las funciones homologas (iterkeys(),iteritems() y itervalues() ) y en python 3.x solo con la funcion iter iterador= iter(v)
veamos con un ejemplo el concepto de vista para Python 3.x y su funcion iter() que su proposito puede ser mas para compatibilidad hacia atras con versiones previs a python 3.x
diccionario de ejemlo:
>>>dic={"guido":"python","linus":"linux","richard":"gnu"}
python 2.x
>>>iterador=dic.iterkeys()
ahora borremos un elemento del diccionario:
>>>del(dic["linus"])
ahora iteramos:
>>>for key in iterador:
.... print key
....
Traceback (most recent call last):
File "
NameError: name 'iterador' is not defined
bueno nos genera un error ya que nuestro iterador tiene un diccionario definido y al modificarlo
ya no podemos iterarlo osea recorrerlo con el for :( y ahi es donde entra el concepto de vista con python3 porque las vista son iterables :) veamos:
python 3.x
>>>dic={"guido":"python","linus":"linux","richard":"gnu"}
obtenemos la vista:
>>> vista=dic.keys()
ahora borremos un elemento del diccionario
>>>del(dic["linus"])
ahora iteramos con la vista:
>>>for key in vista:
.... print (key)
....
guido
richard
si en python 3.x hubieramos obtenido el iterador atraves de la funcion iter() asi iterador=iter(dic.keys()) si hacemos asi en python 3 tendriamos un comportamiento similar a Python 2.x y es el de que ese iterador no soporta modificacion durante la ejecucion.
Bueno creo que con lo que llevamos hasta aqui de python que son los tipos de datos operadores, listas, tuplas y diccionarios que era algo fundamental antes de iniciar con funciones, sentencias condicionales y bucles, que lo veremos ya en el proximo post. vamos despacios porque con el lanzamiento de python3 en cada tema vamos mostrando como se hace en python 2.x y ahora como se hace en python 3.x bueno no es todo pero donde hallan cambios lo ire indicando para que los que andan practicando vean el porque de las excepciones que nos arroja, bueno cualquier duda me la hacen saber bye.
Write By Hackchan
Realmente excelente, estoy enseñando Python en un colegio y tu pagina es muy muy util. Muchas gracias, Dios te bendiga.
ResponderEliminarAndrés
Como seria un diccionario que en la clave contiene tuplas??
ResponderEliminarkomo imprimo la frases del dicionario y su significado
ResponderEliminarpalabra(significado)
y q me kede asi
muy bien!
ResponderEliminarsale graciaas
ResponderEliminarke onda mau como andas???????
ResponderEliminarok muy bueno
ResponderEliminaryo bien y ustedes???
ResponderEliminarexelente aka comuinicandonos con la ana jajajajaja
ResponderEliminargracias por resolver estas dudas!!
ResponderEliminarHola podria hacer una pregunta?
ResponderEliminarHola gracias por los tips de los diccionarios realmente útil ;) aparte el plus de mostrar diferencias entre cada versión te luciste man ;)
ResponderEliminarEntre porque queria hacer un diccionario con varios valores, ahora me quedo claro que la clave no puede ser lista, pero los valores no mencionaste restricciones así que hize la prueb ay si funciono ;)
>>>lista = ["hello", "hi"]
>>>dict = {"saludos": lista}
>>>dict
{"saludos": ["hello", "hi"]}
Gracias chaoo
Gracias, me ayudaste con unas dudas! Sigue así!
ResponderEliminar=)
ResponderEliminarmuy completo.. gracias
ResponderEliminargracias, esta claro y bien documentado.
ResponderEliminarGracias excelente documento de ayuda
ResponderEliminarExcelente trabajo.
ResponderEliminar