Parte 2
Diccionarios
Definen una relación uno-a-uno entre claves y valores- Similar a un hash en Perl
- Similar a una instancia de Hashtable en Java
- Similar a Scripting.Dictionary en Visual Basic
>>> params = {"server":"myserver", "database":"master","uid":"sa","pwd":"secret" }
>>> params
{'pwd': 'secret', 'datatabase': 'master', 'uid': 'sa', 'server': 'myserver'}
>>> params['pwd']
'secret'
>>> params['database']
'master'
>>> params['sa']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'sa'
Modificando diccionarios
>>> params
{'pwd': 'secret', 'database': 'master', 'uid': 'sa', 'server': 'myserver'}
>>> params['database'] = 'localhost'
>>> params
{'pwd': 'secret', 'database': 'localhost', 'uid': 'sa', 'server': 'myserver'}
>>> dic = {}
>>> dic['algo'] = 'uno'
>>> dic['Algo'] = 'dos'
>>> dic[3] = 'cinco'
>>> dic
{3: 'cinco', 'algo': 'uno', 'Algo': 'dos'}
Borrando items de diccionarios
>>> del dic[3]
>>> dic
{'algo': 'uno', 'Algo': 'dos'}
Mas sobre diccionarios
- How to Think Like a Computer Scientist muestra como usar diccionarios para matrices.
- Python Knowledge Base posee muchos ejemplos de código usando diccionarios.
- Python Cookbook muestra como ordenar valores de diccionarios por clave.
- Python Library Reference hacer un resumen de todos los métodos de diccionario.
Listas
Secuencia ordenada de items que puede ser modificada (mutable)- Similar a arrays en Visual Basic
- Similar a datastore en Powerbuilder
- Similar a Array en Perl (pero sin @)
- Mas que un Array en Java, mas bien similar a ArrayList
>>> li = ["a", "b", "mpilgrim", "z", "example"]
>>> li
['a', 'b', 'mpilgrim', 'z', 'example']
>>> li[0]
'a'
>>> li[4]
'example'
Indices negativos
>>> li
['a', 'b', 'mpilgrim', 'z', 'example']
>>> li[-1] 1
'example'
>>> li[-3] 2
'mpilgrim'
Particiones o slices
>>> li
['a', 'b', 'mpilgrim', 'z', 'example']
>>> li[1:3]
['b', 'mpilgrim']
>>> li[1:-1]
['b', 'mpilgrim', 'z']
>>> li[0:3] 3
['a', 'b', 'mpilgrim']
>>> li
['a', 'b', 'mpilgrim', 'z', 'example']
>>> li[:3] 1
['a', 'b', 'mpilgrim']
>>> li[3:] 2 3
['z', 'example']
>>> li[:] 4
['a', 'b', 'mpilgrim', 'z', 'example']
Agregando elementos a listas
>>> li
['a', 'b', 'mpilgrim', 'z', 'example']
>>> li.append("new")
>>> li
['a', 'b', 'mpilgrim', 'z', 'example', 'new']
>>> li.insert(2, "new")
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new']
>>> li.extend(["two", "elements"])
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
Búsquedas en listas
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li.index("example")
5
>>> li.index("new")
2
>>> li.index("c")
Traceback (innermost last):
File "<interactive input>", line 1, in ?
ValueError: list.index(x): x not in list
>>> "c" in li
0
Borrando elementos de listas
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li.remove("z")
>>> li
['a', 'b', 'new', 'mpilgrim', 'example', 'new', 'two', 'elements']
>>> li.remove("new")
>>> li
['a', 'b', 'mpilgrim', 'example', 'new', 'two', 'elements']
>>> li.remove("c")
Traceback (innermost last):
File "<interactive input>", line 1, in ?
ValueError: list.remove(x): x not in list
>>> li.pop()
'elements'
>>> li
['a', 'b', 'mpilgrim', 'example', 'new', 'two']
Operaciones de Listas
>>> li = ['a', 'b', 'mpilgrim']
>>> li = li + ['example', 'new']
>>> li
['a', 'b', 'mpilgrim', 'example', 'new']
>>> li += ['two']
>>> li
['a', 'b', 'mpilgrim', 'example', 'new', 'two']
>>> li = [1, 2] * 3
>>> li
[1, 2, 1, 2, 1, 2]
Mas sobre Listas
- How to Think Like a Computer Scientist enseña sobre listas y en particular su uso como argumentos de función.
- Python Tutorial muestra cómo usa listas como pilas y colas.
- Python Knowledge Base responder preguntas comunes sobre listas y posee muchos ejemplos de uso de listas.
- Python Library Reference hace un resumen de todos los métodos de listas.
Tuplas
Las tuplas son una lista inmutable. No puede ser cambiada una vez creada.>>> t = ("a", "b", "mpilgrim", "z", "example")
>>> t
('a', 'b', 'mpilgrim', 'z', 'example')
>>> t[0]
'a'
>>> t[-1]
'example'
>>> t[1:3]
('b', 'mpilgrim')
Las tuplas no tienen métodos
>>> t
('a', 'b', 'mpilgrim', 'z', 'example')
>>> t.append("new")
Traceback (innermost last):
File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'append'
>>> t.remove("z")
Traceback (innermost last):
File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'remove'
>>> t.index("example")
Traceback (innermost last):
File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'index'
>>> "z" in t
1
Mas sobre tuplas
- How to Think Like a Computer Scientist muestra sobre las tuplas y en particular como concatenar tuplas.
- Python Knowledge Base muestra como ordenar una tuple.
- Python Tutorial muestra como definir una tupla con un elemento.
Variables
Python posee variables locales y globales como todo lenguaje. Aunque no necesita declaración explicita.if __name__ == "__main__":
myParams = {"server":"mpilgrim", \
"database":"master", \
"uid":"sa", \
"pwd":"secret" \
}
>>> x
Traceback (innermost last):
File "<interactive input>", line 1, in ?
NameError: There is no variable named 'x'
>>> x = 1
>>> x
1
Asignación múltiple
>>> v = ('a', 'b', 'e')
>>> (x, y, z) = v 1
>>> x
'a'
>>> y
'b'
>>> z
'e'
>>> range(7)
[0, 1, 2, 3, 4, 5, 6]
>>> (LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO) = range(7)
>>> LUNES
0
>>> MARTES
1
>>> DOMINGO
6
Formato de Strings
>>> k = "uid"
>>> v = "sa"
>>> "%s=%s" % (k, v) 1
'uid=sa'
>>> uid = "sa"
>>> pwd = "secret"
>>> print pwd + " is not a good password for " + uid
secret is not a good password for sa
>>> print "%s is not a good password for %s" % (pwd, uid)
secret is not a good password for sa
>>> userCount = 6
>>> print "Users connected: %d" % (userCount, )
Users connected: 6
>>> print "Users connected: " + userCount
Traceback (innermost last):
File "<interactive input>", line 1, in ?
TypeError: cannot add type "int" to string
Listas por comprensión
>>> li = [1, 9, 8, 4]
>>> [elem*2 for elem in li]
[2, 18, 16, 8]
>>> li
[1, 9, 8, 4]
>>> li = [elem*2 for elem in li]
>>> li
[2, 18, 16, 8]
["%s=%s" % (k, v) for k, v in params.items()]
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> params.keys() 1
['server', 'uid', 'database', 'pwd']
>>> params.values() 2
['mpilgrim', 'sa', 'master', 'secret']
>>> params.items() 3
[('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> params.items()
[('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]
>>> [k for k, v in params.items()]
['server', 'uid', 'database', 'pwd']
>>> [v for k, v in params.items()]
['mpilgrim', 'sa', 'master', 'secret']
>>> ["%s=%s" % (k, v) for k, v in params.items()]
['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
Unión y división de listas
return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> ["%s=%s" % (k, v) for k, v in params.items()]
['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
>>> ";".join(["%s=%s" % (k, v) for k, v in params.items()])
'server=mpilgrim;uid=sa;database=master;pwd=secret'
>>> li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
>>> s = ";".join(li)
>>> s
'server=mpilgrim;uid=sa;database=master;pwd=secret'
>>> s.split(";")
['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
>>> s.split(";", 1)
['server=mpilgrim', 'uid=sa;database=master;pwd=secret']
Más lectura
- Python Knowledge Base responde preguntas comunes sobre strings y posee muchos ejemplos de código usando strings.
- Python Library Reference hace un resumen de todos los métodos de string.
- Python Library Reference documenta el modulo string.
- The Whole Python FAQ explica por qué join es un método de string en vez de ser de lista.
Ejercicios
- Usando diccionarios escriba un programa para traducir palabras del ingles al español. Que satisfaga:
Palabra: hola
Word: hello - Modificar el programa anterior para permitir agregar palabras, listar palabras y borrar palabras del diccionario
- Modificar el programa anterior para convertir todas las palabras en inglés en mayúsculas
- Agregar una opción al programa que imprima todas las palabras en cada idioma
Solucion:
>>> dic = {}
>>> def traducir(palabra):
... if palabra in dic:
... return dic[palabra]
... else:
... return 'no esta'
...
>>> dic['hola'] = 'hello'
>>> traducir('hola')
'hello'
>>> def agregar(esp, ing):
... dic[esp] = ing
...
>>> def borrar(esp):
... del dic[esp]
>>> def listar():
... return dic.keys()
>>> def mayus():
... for i in listar():
... dic[i] = dic[i].capitalize()
... return dic
>>> def listar_espanol():
... return dic.keys()
>>> def listar_ingles():
... return dic.values()