<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mundo Geek &#187; diccionarios</title>
	<atom:link href="http://mundogeek.net/etiqueta/diccionarios/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Fri, 25 May 2012 14:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Python: Revisitando objetos</title>
		<link>http://mundogeek.net/archivos/2008/03/07/python-revisitando-objetos/</link>
		<comments>http://mundogeek.net/archivos/2008/03/07/python-revisitando-objetos/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 11:46:51 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cadenas]]></category>
		<category><![CDATA[clases]]></category>
		<category><![CDATA[diccionarios]]></category>
		<category><![CDATA[listas]]></category>
		<category><![CDATA[metodos]]></category>
		<category><![CDATA[objetos]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tuplas]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2008/03/07/python-revisitando-objetos/</guid>
		<description><![CDATA[En Python: Tipos básicos y Python: Tipos básicos II veíamos por primera vez algunos de los objetos del lenguaje Python: números, booleanos, cadenas de texto, diccionarios, listas y tuplas. Ahora que sabemos qué son las clases, los objetos, las funciones, y los métodos es el momento de revisitar estos objetos para descubrir su verdadero potencial. [...]]]></description>
			<content:encoded><![CDATA[<p>En <a href="http://mundogeek.net/archivos/2008/01/17/python-tipos-basicos/" title="Python: Tipos básicos">Python: Tipos básicos</a> y <a href="http://mundogeek.net/archivos/2008/01/21/python-tipos-basicos-ii-colecciones/" title="Python: Tipos básicos II">Python: Tipos básicos II</a> veíamos por primera vez algunos de los objetos del lenguaje Python: números, booleanos, cadenas de texto, diccionarios, listas y tuplas.</p>
<p>Ahora que sabemos qué son las clases, los objetos, las funciones, y los métodos es el momento de revisitar estos objetos para descubrir su verdadero potencial.</p>
<p>Veremos a continuación algunos métodos útiles de estos objetos. Evidentemente, no es necesario que los memoricéis, pero si, al menos, recordar que existen para cuando os hagan falta.<br />
<span id="more-1404"></span></p>
<h2>Diccionarios</h2>
<p><strong>D.has_key(k)</strong><br />
Comprueba si el diccionario tiene la clave <code>k</code>. Es equivalente a la sintaxis <code>k in D</code>.</p>
<p><strong>D.items()</strong><br />
Devuelve una lista de tuplas con pares clave-valor.</p>
<p><strong>D.keys()</strong><br />
Devuelve una lista de las claves del diccionario.</p>
<p><strong>D.pop(k[, d])</strong><br />
Borra la clave <code>k</code> del diccionario y devuelve su valor. Si no se encuentra dicha clave se devuelve <code>d</code> si se especificó el parámetro o bien se lanza una excepción.</p>
<p><strong>D.values()</strong><br />
Devuelve una lista de los valores del diccionario.</p>
<h2>Cadenas</h2>
<p><strong>S.count(sub[, start[, end]])</strong><br />
Devuelve el número de veces que se encuentra <code>sub</code> en la cadena. Los parámetros opcionales start y end definen una subcadena en la que buscar.</p>
<p><strong>S.find(sub[, start[, end]])</strong><br />
Devuelve la posición en la que se encontró por primera vez <code>sub</code> en la cadena o -1 si no se encontró.</p>
<p><strong>S.join(sequence)</strong><br />
Devuelve una cadena resultante de concatenar las cadenas de la secuencia <code>seq</code> separadas por nuestra cadena.</p>
<p><strong>S.partition(sep)</strong><br />
Busca el separador <code>sep</code> en la cadena y devuelve una tupla con la subcadena hasta dicho separador, el separador en si, y la subcadena del separador hasta el final de la cadena. Si no se encuentra el separador, la tupla contendrá la cadena en si y dos cadenas vacías.</p>
<p><strong>S.replace(old, new[, count])</strong><br />
Devuelve una cadena en la que se han reemplazado todas las ocurrencias de la cadena <code>old</code> por la cadena <code>new</code>. Si se especifica el parámetro <code>count</code>, este indica el número máximo de ocurrencias a reemplazar.</p>
<p><strong>S.split([sep [,maxsplit]])</strong><br />
Devuelve una lista conteniendo las subcadenas en las que se divide nuestra cadena al dividirlas por el delimitador <code>sep</code>. En el caso de que no se especifique <code>sep</code>, se usan espacios. Si se especifica <code>maxsplit</code>, este indica el número máximo de particiones a realizar.</p>
<h2>Listas</h2>
<p><strong>L.append(object)</strong><br />
Añade un objeto al final de la lista.</p>
<p><strong>L.count(value)</strong><br />
Devuelve el número de veces que se encontró <code>value</code> en la lista.</p>
<p><strong>L.extend(iterable)</strong><br />
Añade los elementos del iterable a la lista.</p>
<p><strong>L.index(value[, start[, stop]])</strong><br />
Devuelve la posición en la que se encontró la primera ocurrencia de <code>value</code>. Si se especifican, start y stop definen una sublista en la que buscar.</p>
<p><strong>L.insert(index, object)</strong><br />
Inserta el objeto <code>object</code> en la posición <code>index</code>.</p>
<p><strong>L.pop([index])</strong><br />
Devuelve el valor en la posición <code>index</code> y lo elimina de la lista. Si no se especifica la posición, se utiliza el último elemento de la lista.</p>
<p><strong>L.remove(value)</strong><br />
Eliminar la primera ocurrencia de <code>value</code> en la lista.</p>
<p><strong>L.reverse()</strong><br />
Invierte la lista. Esta función trabaja sobre la propia lista desde la que se invoca el método, no sobre una copia.</p>
<p><strong>L.sort(cmp=None, key=None, reverse=False)</strong><br />
Ordena la lista. Si se especifica <code>cmp</code>, este debe ser una función que tome como parámetro dos valores <code>x</code> e <code>y</code> de la lista y devuelva -1 si <code>x</code> es menor que <code>y</code>, 0 si son iguales y 1 si <code>x</code> es mayor que <code>y</code>.</p>
<p>El parámetro <code>reverse</code> es un booleano que indica si se debe ordenar la lista de forma inversa, lo que sería equivalente a llamar primero a <code>L.sort()</code> y después a <code>L.reverse()</code>.</p>
<p>Por último, si se especifica, el parámetro <code>key</code> debe ser una función que tome un elemento de la lista y devuelva una clave a utilizar a la hora de comparar, en lugar del elemento en si.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/03/07/python-revisitando-objetos/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Python: Tipos básicos II (Colecciones)</title>
		<link>http://mundogeek.net/archivos/2008/01/21/python-tipos-basicos-ii-colecciones/</link>
		<comments>http://mundogeek.net/archivos/2008/01/21/python-tipos-basicos-ii-colecciones/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 10:14:34 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[diccionarios]]></category>
		<category><![CDATA[listas]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tipos]]></category>
		<category><![CDATA[tuplas]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2008/01/21/python-tipos-basicos-ii-colecciones/</guid>
		<description><![CDATA[En Python: Tipos básicos vimos los números, las cadenas de texto y los booleanos. En esta lección veremos algunos tipos de colecciones de datos: listas, tuplas y diccionarios. Listas La lista es un tipo de colección ordenada. Sería equivalente a lo que en otros lenguajes se conoce por arrays, o vectores. Las listas pueden contener [...]]]></description>
			<content:encoded><![CDATA[<p>En <a href="http://mundogeek.net/archivos/2008/01/17/python-tipos-basicos/" title="Python: Tipos básicos">Python: Tipos básicos</a> vimos los números, las cadenas de texto y los booleanos. En esta lección veremos algunos tipos de colecciones de datos: listas, tuplas y diccionarios.</p>
<h2>Listas</h2>
<p>La lista es un tipo de colección ordenada. Sería equivalente a lo que en otros lenguajes se conoce por arrays, o vectores.</p>
<p>Las listas pueden contener cualquier tipo de dato: números, cadenas, booleanos, &#8230; y también listas.</p>
<p>Crear una lista es tan sencillo como indicar entre corchetes, y separados por comas, los valores que queremos incluir en la lista:</p>
<pre class="code">l = [22, True, <span class="Normal">&quot;</span><span class="String">una lista</span><span class="Normal">&quot;</span>, [1, 2]]</pre>
<p>Podemos acceder a cada uno de los elementos de la lista escribiendo el nombre de la lista e indicando el índice del elemento entre corchetes. Ten en cuenta sin embargo que el índice del primer elemento de la lista es 0, y no 1:</p>
<pre class="code">mi_var = l[0] <span class="pythonComment"># mi_var vale 22</span></pre>
<p><span id="more-1341"></span><br />
Si queremos acceder a un elemento de una lista incluida dentro de otra lista tendremos que utilizar dos veces este operador, primero para indicar a qué posición de la lista exterior queremos acceder, y el segundo para seleccionar el elemento de la lista interior:</p>
<pre class="code">mi_var = l[3][0] <span class="pythonComment"># mi_var vale 1</span></pre>
<p>También podemos utilizar este operador para modificar un elemento de la lista si lo colocamos en la parte izquierda de una asignación:</p>
<pre class="code">l[0] = 99 <span class="pythonComment"># l vale [99, True, &quot;una lista&quot;, [1, 2]]</span></pre>
<p>El uso de los corchetes para acceder y modificar los elementos de una lista es común en muchos lenguajes, pero Python nos depara varias sorpresas muy agradables.</p>
<p>Una curiosidad sobre el operador [] de Python es que podemos utilizar también números negativos. Si se utiliza un número negativo como índice, esto se traduce en que el índice empieza a contar desde el final, hacia la izquierda; es decir, con [-1] accederíamos al último elemento de la lista, con [-2] al penúltimo, con [-3], al antepenúltimo, y así sucesivamente.</p>
<p>Otra cosa inusual es lo que en Python se conoce como slicing o particionado, y que consiste en ampliar este mecanismo para permitir seleccionar porciones de la lista. Si en lugar de un número escribimos dos números <em>inicio</em> y <em>fin</em> separados por dos puntos (inicio:fin) Python interpretará que queremos una lista que vaya desde la posición inicio a la posición fin, sin incluir este último. Si escribimos tres números (inicio:fin:salto) en lugar de dos, el tercero se utiliza para determinar cada cuantas posiciones añadir un elemento a la lista.</p>
<pre class="code">mi_var = l[0:2]   <span class="pythonComment"># mi_var vale [99, True]</span>
mi_var = l[0:4:2] <span class="pythonComment"># mi_var vale [99, &quot;una lista&quot;]</span></pre>
<p>Los números negativos también se pueden utilizar, con el mismo comportamiento que se comentó anteriormente.</p>
<p>Hay que mencionar así mismo que no es necesario indicar el principio y el final del slicing, sino que, si estos se omiten, se usarán por defecto las posiciones de inicio y final de la lista respectivamente:</p>
<pre class="code">mi_var = l[1:]  <span class="pythonComment"># mi_var vale [True, &quot;una lista&quot;, [1, 2]]</span>
mi_var = l[:2]  <span class="pythonComment"># mi_var vale [99, True]</span>
mi_var = l[:]   <span class="pythonComment"># mi_var vale [99, True, &quot;una lista&quot;, [1, 2]]</span>
mi_var = l[::2] <span class="pythonComment"># mi_var vale [99, &quot;una lista&quot;]</span></pre>
<p>También podemos utilizar este mecanismo para modificar la lista:</p>
<pre class="code">l[0:2] = [0, 1] <span class="pythonComment"># l vale [0, 1, &quot;una lista&quot;, [1, 2]]</span></pre>
<p>pudiendo incluso modificar el tamaño de la lista si la lista de la parte derecha de la asignación tiene un tamaño menor o mayor que el de la selección de la parte izquierda de la asignación:</p>
<pre class="code">l[0:2] = [False] <span class="pythonComment"># l vale [False, &quot;una lista&quot;, [1, 2]]</span></pre>
<p>En todo caso las listas ofrecen mecanismos más cómodos para ser modificadas a través de las funciones de la clase correspondiente, aunque no veremos estos mecanismos hasta más adelante, después de explicar lo que son las clases, los objetos y las funciones.</p>
<h2>Tuplas</h2>
<p>Todo lo que hemos explicado sobre las listas se aplica también a las tuplas, a excepción de la forma de definirla, en la que se utiliza paréntesis en lugar de corchetes.</p>
<pre class="code">t = (1, 2, True, <span class="Normal">&quot;</span><span class="String">python</span><span class="Normal">&quot;</span>)</pre>
<p>En realidad el constructor de la tupla es la coma, no el paréntesis, pero el intérprete muestra los paréntesis, y nosotros deberíamos utilizarlos, por claridad.</p>
<p class="code">&gt;&gt;&gt; t = 1, 2, 3<br />
&gt;&gt;&gt; type(t)<br />
type &#8220;tuple&#8221;</p>
<p>Además hay que tener en cuenta que es necesario añadir una coma para tuplas de un solo elemento, para diferenciarlo de un elemento entre paréntesis.</p>
<p class="code">&gt;&gt;&gt; t = (1)<br />
&gt;&gt;&gt; type(t)<br />
type &#8220;int&#8221;<br />
&gt;&gt;&gt; t = (1,)<br />
&gt;&gt;&gt; type(t)<br />
type &#8220;tuple&#8221;</p>
<p>Para referirnos a elementos de una tupla, como en una lista, se usa el operador []:</p>
<pre class="code">mi_var = t[0] <span class="pythonComment"># mi_var es 1</span>
mi_var = t[0:2] <span class="pythonComment"># mi_var es (1, 2)</span></pre>
<p>Podemos utilizar el operador [] debido a que las tuplas, al igual que las listas, forman parte de un tipo de objetos llamados secuencias. Permitirme un pequeño inciso para indicaros que las cadenas de texto también son secuencias, por lo que no os extrañará que podamos hacer cosas como estas:</p>
<pre class="code">c = <span class="Normal">&quot;</span><span class="String">hola mundo</span><span class="Normal">&quot;</span>
c[0]   <span class="pythonComment"># h</span>
c[5:]  <span class="pythonComment"># mundo</span>
c[::3] <span class="pythonComment"># hauo</span></pre>
<p>Volviendo al tema de las tuplas, su diferencia con las listas estriba en que las tuplas no poseen estos mecanismos de modificación tan útiles de los que hablábamos al final de la anterior sección. También son inmutables, es decir, sus valores no se pueden modificar una vez creada; y de tamaño fijo. A cambio las tuplas son más &#8220;ligeras&#8221; que las listas, por lo que si el uso que le vas a dar a tu colección es muy básico, puedes utilizar tuplas en lugar de listas y ahorrar memoria.</p>
<h2>Diccionarios</h2>
<p>Los diccionarios, también llamados matrices asociativas, deben su nombre a que son colecciones que relacionan una clave y un valor. Por ejemplo, veamos un diccionario de películas y directores:</p>
<pre class="code">d = {<span class="Normal">&quot;</span><span class="String">Love Actually </span><span class="Normal">&quot;</span>: <span class="Normal">&quot;</span><span class="String">Richard Curtis</span><span class="Normal">&quot;</span>,
     <span class="Normal">&quot;</span><span class="String">Kill Bill</span><span class="Normal">&quot;</span>: <span class="Normal">&quot;</span><span class="String">Tarantino</span><span class="Normal">&quot;</span>,
     <span class="Normal">&quot;</span><span class="String">Amélie</span><span class="Normal">&quot;</span>: <span class="Normal">&quot;</span><span class="String">Jean-Pierre Jeunet</span><span class="Normal">&quot;</span>}</pre>
<p>El primer valor se trata de la clave y el segundo del valor asociado a la clave. Como clave podemos utilizar cualquier valor inmutable: podríamos usar números, cadenas, booleanos, tuplas, &#8230; pero no listas o diccionarios, dado que son mutables. Esto es así porque los diccionarios se implementan como tablas hash, y a la hora de introducir un nuevo par clave-valor en el diccionario se calcula el hash de la clave para después poder encontrar la entrada correspondiente rápidamente. Si se modificara el objeto clave después de haber sido introducido en el diccionario, evidentemente, su hash también cambiaría y no podría ser encontrado.</p>
<p>La diferencia principal entre los diccionarios y las listas o las tuplas es que a los valores almacenados en un diccionario se les accede no por su índice, porque de hecho no tienen orden, sino por su clave, utilizando de nuevo el operador [].</p>
<pre class="code">d[<span class="Normal">&quot;</span><span class="String">Love Actually </span><span class="Normal">&quot;</span>] <span class="pythonComment"># devuelve &quot;Richard Curtis&quot;</span></pre>
<p>Al igual que en listas y tuplas también se puede utilizar este operador para reasignar valores.</p>
<pre class="code">d[<span class="Normal">&quot;</span><span class="String">Kill Bill</span><span class="Normal">&quot;</span>] = <span class="Normal">&quot;</span><span class="String">Quentin Tarantino</span><span class="Normal">&quot;</span></pre>
<p>Sin embargo en este caso no se puede utilizar slicing, entre otras cosas porque los diccionarios no son secuencias, si no mappings (mapeados, asociaciones).</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/01/21/python-tipos-basicos-ii-colecciones/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

