Diccionario en python, con ejemplos
El proyecto de este post lo puedes descargar pulsando AQUI.
Los diccionarios en Python son un tipo de estructuras de datos que permite guardar un conjunto no ordenado de pares clave-valor, siendo las claves únicas dentro de un mismo diccionario (es decir que no pueden existir dos elementos con una misma clave). Los diccionarios son estructuras de datos muy extendidos en otros lenguajes de programación, aunque en otros lenguajes como java se les denominan con distintos nombres como "Map" (ver entrada "Map en Java, con ejemplos").
Veamos a continuación un ejemplo de como declarariamos un diccionario en Python en cuyos elementos tenemos los jugadores de la selección Española, siendo la clave su dorsal (clave única) y el valor su nombre.
# Defino la varible 'futbolistas' como un diccionario. No es necesario declarar que tipo de dato es futbolistas = dict() futbolistas = { 1 : "Casillas", 15 : "Ramos", 3 : "Pique", 5 : "Puyol", 11 : "Capdevila", 14 : "Xabi Alonso", 16 : "Busquets", 8 : "Xavi Hernandez", 18 : "Pedrito", 6 : "Iniesta", 7 : "Villa" }
Como vemos el diccionario de declara entre los caracteres '{}' y cada uno de los elementos los separamos por comas (','). Cada elemento lo definimos con su par clave:valor, pudiendo der la clave y el valor de cualquier tipo de dato (‘int’, ‘float’, ‘chr’, ‘str’, ‘bool’, ‘object’).
Vamos a continuación a recorrer el diccionario (con un foreach) y a imprimir sus pares clave:valor (más adelante veremos todos los métodos de los diccionarios) :
# Recorrer un diccionario, imprimiendo su clave-valor for k,v in futbolistas.items(): print "%s -> %s" %(k,v)
Como resultado de este código tenemos lo siguiente:
1 -> Casillas 3 -> Pique 5 -> Puyol 6 -> Iniesta 7 -> Villa 8 -> Xavi Hernandez 11 -> Capdevila 14 -> Xabi Alonso 15 -> Ramos 16 -> Busquets 18 -> Pedrito
Vamos a pasar ahora a mostrar los métodos (o funciones) para trabajar con los diccionarios en Python, y posteriormente a poner ejemplos del funcionamiento de estos métodos:
# Declaración de un diccionario diccionario = dict() # Devuelve el numero de elementos que tiene el diccionario len(dict) # Compara el número de elementos distintos que tienen los dos cmp (dict1,dict2) # Devuelve una lista con las claves del diccionario dict.keys() # Devuelve una lista con los valores del diccionario dict.values() # Devuelve el valor del elemento con clave key. Sino devuelve default dict.get(key, default=None) # Inserta un elemento en el diccionario clave:valor. Si la clave existe no lo inserta dict.setdefault(key, default=None) # Insertamos un elemento en el diccionario con su clave:valor dict['key'] = 'value' # Eliminamos el elemento del diccionario con clave key dict.pop('key',None) # Devuleve la copia de un diccionario dict2 = dict.copy() dict.copy() # Elimina todos los elementos de un diccionario dict.clear() # Crea un nuevo diccionario poniendo como claves las que hay en la lista y los valores por defecto si se les pasa dict.fromkeys(list, defaultValue) # Devuelve true si existe la clave. Sino devuelve false dict.has_key(key) # devuelve un lista de tuplas formadas por los pares clave:valor dict.items() # Añade los elementos de un diccionario a otro dict.update(dict2)
Una vez vistos los métodos (o funciones) que nos permiten trabajar con los diccionarios, vamos a mostrar como trabajar con estos métodos. Para ello nos vamos a utilizar el diccionario 'futbolistas' que hemos declarado al principio, en el que hemos guardado elementos futbolista te tienen como clave su dorsal (es decir un 'int') y como valor su nombre (un 'string').
En primer lugar vamos a mostrar como contar los elementos de un diccionario, que lo hacemos de la siguiente forma
# Vemos cuantos elementos tiene nuestro diccionario numElem = len(futbolistas) print "\nNumero de elementos del diccionario len(futbolistas) = %i" %numElem
Teniendo como salida de ese fragmento de código:
Numero de elementos del diccionario len(futbolistas) = 11
Con el método "keys()" obtenemos una lista con las claves de los diccionarios y de la misma forma con el método "values()" obtenemos una lista con los valores del diccionario. En el siguiente fragmento de código vemos como obtener estas listas:
# Imprimimos una lista con las claves del diccionario keys = futbolistas.keys(); print "\nClaves del diccionario futbolistas.keys(): \n%s" %keys # Imprimimos en una lista los valores del diccionario values = futbolistas.values() print "\nValores del diccionario futbolistas.values(): \n%s" %values
Como salida de este fragmento de código tenemos lo siguiente:
Claves del diccionario futbolistas.keys(): [1, 3, 5, 6, 7, 8, 11, 14, 15, 16, 18] Valores del diccionario futbolistas.values(): ['Casillas', 'Pique', 'Puyol', 'Iniesta', 'Villa', 'Xavi Hernandez', 'Capdevila', 'Xabi Alonso', 'Ramos', 'Busquets', 'Pedrito']
Con el método "get(key)", pasándole como parámetro una clave, obtenemos el valor del elemento que tiene esa clave:
# Obtenemos el valor de un elemento dada su clave elem = futbolistas.get(6) print "\nObtenemos el valor cuya clave es '6' futbolistas.get(6): %s" %elem
Como resultado, obtenemos el nombre del futbolista con clave = 6:
Obtenemos el valor cuya clave es '6' futbolistas.get(6): Iniesta
A continuación vamos a ver dos formas de insertar elementos en el diccionario. La primera de ellas es la más sencilla (como si de un array asociativo se tratase), pasándole la clave entre corchetes y asignándole un valor:
# Añadimos un nuevo elemento a la lista futbolistas[22] = 'Navas' print "\nDiccionario tras añadir un elemento: futbolistas[22] = 'Navas' \n%s" %futbolistas
Como resultado, tenemos en el diccionario un elemento más:
Diccionario tras añadir un elemento: futbolistas[22] = 'Navas' {1: 'Casillas', 3: 'Pique', 5: 'Puyol', 6: 'Iniesta', 7: 'Villa', 8: 'Xavi Hernandez', 10: 'Cesc', 11: 'Capdevila', 14: 'Xabi Alonso', 15: 'Ramos', 16: 'Busquets', 18: 'Pedrito', 22: 'Navas'}
La segunda forma de insertar un elemento es con el método "setdefault(key,default=valor)" al que se le pasa como parámetros un clave y un valor. Este método tiene la peculiaridad de que solo inserta el elemento en el diccionario sino existe un elemento con esa clave. Si existe un elemento con esa clave no realiza la inserción:
# Insertamos un elemento en el array. Si la clave ya existe no inserta el elemento elem2 = futbolistas.setdefault(10,'Cesc') print "\nInsertamos un elemento en el diccionario. Si la clave existe no lo inserta" \ "\nfutbolistas.setdefault(10,'Cesc'): %s" %elem2
Como resultado al fragmento de código anterior tenemos lo siguiente:
Insertamos un elemento en el diccionario. Si la clave existe no lo inserta futbolistas.setdefault(10,'Cesc'): Cesc
El siguiente método que vamos a ver "pop(key)" nos borrará del diccionario aquel elemento que tenga como clave, la que le pasamos como parámetro. Por ejemplo vamos a borrar el elemento con clave = 22:
# Eliminamos un elemento del diccionario dada su clave futbolistas.pop(22) print "\nDiccionario tras eliminar un elemento: futbolistas.pop(22) \n%s" %futbolistas
Como resultado de este fragmento de código, podemos observar que efectivamente ha realizado el borrado del elemento con clave = 22:
Diccionario tras eliminar un elemento: futbolistas.pop(22) {1: 'Casillas', 3: 'Pique', 5: 'Puyol', 6: 'Iniesta', 7: 'Villa', 8: 'Xavi Hernandez', 10: 'Cesc', 11: 'Capdevila', 14: 'Xabi Alonso', 15: 'Ramos', 16: 'Busquets', 18: 'Pedrito'}
Para hacer una copia de un diccionario, se utiliza el método "copy()":
# Hacemos una copia del diccionario futbolistasCopy = futbolistas.copy(); print "\nRealizamos una copia del diccionario futbolistasCopy=futbolistas.copy(): \n%s" %futbolistas
Vamos a ver que como resultado, tenemos un nuevo diccionario llamado 'futbolistasCopy' que contiene los mismos elementos que el diccionario 'futbolistas':
Realizamos una copia del diccionario futbolistasCopy=futbolistas.copy(): {1: 'Casillas', 3: 'Pique', 5: 'Puyol', 6: 'Iniesta', 7: 'Villa', 8: 'Xavi Hernandez', 10: 'Cesc', 11: 'Capdevila', 14: 'Xabi Alonso', 15: 'Ramos', 16: 'Busquets', 18: 'Pedrito'}
Para eliminar el contenido (o los elementos) de un diccionario utilizamos el método "clear()":
# Eliminamos los elementos de un diccionario futbolistasCopy.clear() print "\nEliminamos los elementos de un diccionario futbolistasCopy.clear(): %s" %futbolistasCopy
Vemos como con el fragmento de código anterior nos elimina el contenido del diccionario, pero no elimina el diccionario:
Eliminamos los elementos de un diccionario futbolistasCopy.clear(): {}
Con el método "fromkeys(listKey,default=value)", creamos un diccionario cuyas claves son las que le pasamos como parámetro en una lista. Si le pasamos un segundo parámetro, pondrá ese parámetro como clave de cada uno de los elementos. Veamos un ejemplo:
# Creamos un diccionario a partir de una lista con las claves keys = ['nombre', 'apellidos', 'edad'] dictList = dict.fromkeys(keys, 'nada') print "\nCreamos un diccionario a partir de una lista dictList = dict.fromkeys(keys, 'nada'): \n%s" %dictList
Como resultado, nos crea un diccionario llamado 'dictList', con las claves que le pasamos en la lista y con el valor 'nada' que le pasamos como parámetro:
Creamos un diccionario a partir de una lista dictList = dict.fromkeys(keys, 'nada'): {'apellidos': 'nada', 'nombre': 'nada', 'edad': 'nada'}
El método que nos permite comprobar si existe o no una clave es el método "has_key(key)". Veamos un ejemplo:
# Comprobamos si existe o no una clave exit2 = futbolistas.has_key(2) exit8 = futbolistas.has_key(8) print "\nComprobamos si existen los elementos 2 y 8 \n\tfutbolistas.has_key(2) = %s " \ "\n\tfutbolistas.has_key(8) = %s" %(exit2,exit8)
Como resultado de la comprobación de claves anterior tenemos lo siguiente:
Comprobamos si existen los elementos 2 y 8 futbolistas.has_key(2) = False futbolistas.has_key(8) = True
Otro método muy util; sobre todo para hacer un foreach del diccionario y obtener sus pares clave:valor, es el método "items()" que devuelve los elementos de los diccionarios en tuplas, en la que en cada una de ellas esta en la primera posición la clave y en la segunda el valor. Veamos un ejemplo:
# Devolvemos los elementos del diccionario en tuplas tuplas = futbolistas.items() print "\nPasamos el diccionario a tuplas con clave-valor: tuplas = futbolistas.items() \n%s" %tuplas
Como resultado vemos que efectivamente nos devuelve una lista de tuplas con los pares clave:valor:
Pasamos el diccionario a tuplas con clave-valor: tuplas = futbolistas.items() [(1, 'Casillas'), (3, 'Pique'), (5, 'Puyol'), (6, 'Iniesta'), (7, 'Villa'), (8, 'Xavi Hernandez'), (10, 'Cesc'), (11, 'Capdevila'), (14, 'Xabi Alonso'), (15, 'Ramos'), (16, 'Busquets'), (18, 'Pedrito')]
Por último vamos a ver el método "update(dict)" que nos va a permitir unir los elementos de dos diccionarios. Este método inserta en el diccionario aquellos elementos del diccionario que se le pasa como parámetro, cuyas claves no estén en el diccionario. Veamos el siguiente ejemplo:
# Mergeamos dos diccionarios suplentes = { 4:'Marchena', 9:'Torres', 12:'Valdes', 13:'Mata' , 17:'Arbeloa', 19:'Llorente', 20:'Javi Martinez', 21:'Silva', 23:'Reina' } futbolistas.update(suplentes) print "\nAñadimos los elementos de un diccionario a otro futbolistas.update(suplentes): \n%s" %futbolistas
Como vemos en este ejemplo nos hemos creado un nuevo diccionario con los futbolistas 'suplentes' y lo hemos unido al diccionario futbolistas. De esta forma el diccionario 'futbolistas' ya tiene todos los futbolistas (titulares+suplentes) de la selección Española campeona del mundo en el año 2010. Como resultado tenemos lo siguiente:
Añadimos los elementos de un diccionario a otro futbolistas.update(suplentes): {1: 'Casillas', 3: 'Pique', 4: 'Marchena', 5: 'Puyol', 6: 'Iniesta', 7: 'Villa', 8: 'Xavi Hernandez', 9: 'Torres', 10: 'Cesc', 11: 'Capdevila', 12: 'Valdes', 13: 'Mata', 14: 'Xabi Alonso', 15: 'Ramos', 16: 'Busquets', 17: 'Arbeloa', 18: 'Pedrito', 19: 'Llorente', 20: 'Javi Martinez', 21: 'Silva', 23: 'Reina'}
Estos han sido los métodos más importantes para el manejo de diccionarios en python. A continuación mostramos todo el fragmento del código que hemos ido desgranando en este tutorial:
# -*- coding: utf-8 -*- __author__ = 'Richard' # Defino la varible 'futbolistas' como un diccionario. No es necesario declarar que tipo de dato es futbolistas = dict() futbolistas = { 1 : "Casillas", 15 : "Ramos", 3 : "Pique", 5 : "Puyol", 11 : "Capdevila", 14 : "Xabi Alonso", 16 : "Busquets", 8 : "Xavi Hernandez", 18 : "Pedrito", 6 : "Iniesta", 7 : "Villa" } # Recorrer un diccionario, imprimiendo su clave-valor for k,v in futbolistas.items(): print "%s -> %s" %(k,v) # Vemos cuantos elementos tiene nuestro diccionario numElem = len(futbolistas) print "\nNumero de elementos del diccionario len(futbolistas) = %i" %numElem # Imprimimos una lista con las claves del diccionario keys = futbolistas.keys(); print "\nClaves del diccionario futbolistas.keys(): \n%s" %keys # Imprimimos en una lista los valores del diccionario values = futbolistas.values() print "\nValores del diccionario futbolistas.values(): \n%s" %values # Obtenemos el valor de un elemento dada su clave elem = futbolistas.get(6) print "\nObtenemos el valor cuya clave es '6' futbolistas.get(6): %s" %elem # Insertamos un elemento en el array. Si la clave ya existe no inserta el elemento elem2 = futbolistas.setdefault(10,'Cesc') print "\nInsertamos un elemento en el diccionario. Si la clave existe no lo inserta" \ "\nfutbolistas.setdefault(10,'Cesc'): %s" %elem2 # Añadimos un nuevo elemento a la lista futbolistas[22] = 'Navas' print "\nDiccionario tras añadir un elemento: futbolistas[22] = 'Navas' \n%s" %futbolistas # Eliminamos un elemento del diccionario dada su clave futbolistas.pop(22) print "\nDiccionario tras eliminar un elemento: futbolistas.pop(22) \n%s" %futbolistas # Hacemos una copia del diccionario futbolistasCopy = futbolistas.copy(); print "\nRealizamos una copia del diccionario futbolistasCopy=futbolistas.copy(): \n%s" %futbolistas # Eliminamos los elementos de un diccionario futbolistasCopy.clear() print "\nEliminamos los elementos de un diccionario futbolistasCopy.clear(): %s" %futbolistasCopy # Creamos un diccionario a partir de una lista con las claves keys = ['nombre', 'apellidos', 'edad'] dictList = dict.fromkeys(keys, 'nada') print "\nCreamos un diccionario a partir de una lista dictList = dict.fromkeys(keys, 'nada'): \n%s" %dictList # Comprobamos si existe o no una clave exit2 = futbolistas.has_key(2) exit8 = futbolistas.has_key(8) print "\nComprobamos si existen los elementos 2 y 8 \n\tfutbolistas.has_key(2) = %s " \ "\n\tfutbolistas.has_key(8) = %s" %(exit2,exit8) # Devolvemos los elementos del diccionario en tuplas tuplas = futbolistas.items() print "\nPasamos el diccionario a tuplas con clave-valor: tuplas = futbolistas.items() \n%s" %tuplas # Mergeamos dos diccionarios suplentes = { 4:'Marchena', 9:'Torres', 12:'Valdes', 13:'Mata' , 17:'Arbeloa', 19:'Llorente', 20:'Javi Martinez', 21:'Silva', 23:'Reina' } futbolistas.update(suplentes) print "\nAñadimos los elementos de un diccionario a otro futbolistas.update(suplentes): \n%s" %futbolistas
Hola que tal, una consulta tengo un diccionario con vectores como valores y quiero consultar adentro de ese diccionario si existe alguna palabra igual a la que ingresa el usario.
La idea es que el usuario ingrese una palabra y esa palabra se busque en los valores del diccionario, como mencione esos valores estan como vectores. pero no logro resolverlo, nunca entra en el if.
Buenas Stella.
Cuando usas diccionario.values() te devuelve un listado con todos los vectores, algo así:
Por lo que podrías recorrer en un bucle for para encontrar el que necesites, podría servirte algo como:
Ten en cuenta que si tienes muchos valores va a tardar mucho. Puedes agilizar la búsqueda usando conjuntos en vez de listas si no te importa el orden dentro de los vectores, o búsqueda inmediata teniendo un diccionario invertido (donde los valores son las claves).
Hola que tal amigo, disculpa como puedo agregar nuevas keys que sean la mezcla de letras y numeros. como ejemplo n[Te1]=n[0]
Lo estoy intentando asi pero me da error
Inicialmente tengo este disccionario n:
{0: [‘P01_V05’, ‘P02_V06’, ‘P03_V01’, ‘P03_V04’, ‘P02_V01’, ‘P01_V07’], 1: [‘P03_V08’, ‘P01_V06’, ‘P02_V05’, ‘P01_V10’, ‘P03_V07’, ‘P02_V03’], 2: [‘P03_V02’, ‘P01_V02’, ‘P02_V08’, ‘P03_V10’, ‘P02_V07’, ‘P01_V09’], 3: [‘P02_V04’, ‘P01_V01’, ‘P03_V05’, ‘P03_V09’, ‘P02_V09’, ‘P01_V08’], 4: [‘P03_V06’, ‘P01_V03’, ‘P02_V02’, ‘P02_V10’, ‘P03_V03’, ‘P01_V04’]}
def funcKFV():
for k in n:
print(k)
random.choice(n.keys())
n[«Te%s» %k]=[]
hay como hacerlo?
Saludos !!
A un diccionario de Python puedes agregarlas como string:
n["Te1"] = "valor"
Buenas noches, he creado un diccionario a partir de varias variables. p. ej.
docum1 = «I want to watching films when it’s cold outside, with 45 degree ;-)»
docum2 = «If yoy want to see your son playing rugby you must go Arsenal Stadium, he loves it!»
docum = [docum1, docum2]
docId = [«d01″,»d02»]
documents_dict = dict(zip(docId,docum))
Aplicando la librería y la función siguente, eliminando los caracteres numéricos y signos de puntuación:
from nltk.tokenize import RegexpTokenizer
def tokenizar (texto):
tokens = RegexpTokenizer(«[a-zA-Z’]+»)
ropha = []
ropha.append(tokens.tokenize(texto))
return ropha
documents_w = [tokenizar(doc) for doc in documents_dict.values()]
documents_w_dict = dict ( zip ( documents_dict.keys(), documents_w) )
print(documents_w_dict[‘d01’])
y obtengo el output:
[[‘I’, ‘want’, ‘to’, ‘watching’, ‘films’, ‘when’, «it’s», ‘cold’, ‘with’, ‘degree’]]
Aparece un doble corchete cuando lo que espero es una lista de palabras.
Cuando las convierto en minúsculas con lower() aplicando la función:
def low (tokens ):
low_tokens = []
tokens = str(tokens).lower()
low_tokens.append(tokens)
return low_tokens
doc_w_lower = [low(tokens) for tokens in documents_w_dict.values()]
doc_w_lower_dict = dict ( zip ( documents_dict.keys(),doc_w_lower))
print (doc_w_lower_dict[‘d01’])
Obtengo lo siguente:
[‘[[\’i\’, \’want\’, \’to\’, \’watching\’, \’films\’, \’when\’, «it\’s», \’cold\’, \’with\’, \’degree\’]]’]
Después lo comparo con otra lista buscando que no coincidan y aquí ya no funciona:
import nltk
nltk.download(‘stopwords’)
from nltk.corpus import stopwords
def stop_words_rem(tokens):
stopw = stopwords.words (‘english’)
stop = [ ]
[w for w in tokens if w not in stopw]
stop.append(tokens)
return stop
doc_w_stop = [stop_words_rem(tokens) for tokens in doc_w_lower_dict .values()]
doc_w_stop_dict = dict ( zip ( documents_dict.keys(),doc_w_stop))
print (doc_w_stop_dict[‘doc01’]
y obtengo esto, cada vez hay más corchetes y no deberían aparecer las palabras «i», ‘with’, ‘to’…..
[[‘[[\’i\’, \’want\’, \’to\’, \’watching\’, \’films\’, \’when\’, «it\’s», \’cold\’, \’with\’, \’degree\’]]’]]
¿que estoy haciendo mal? Gracias
Buenas.
Lo del doble paréntesis es porque tokenizer te ha creado una matriz en vez de un listado. Puede extraer el elemento de la matriz: dict[0]
Que tal Ramón espero estés bien, te quiero hacer una consulta? cual es la forma mas fácil de agregar una clave y valor de una entrada por input() por ejemplo:
ejemplo = {«pera»:»peras», «mazana»:»manzanas», «naranja»:»naranjas»}
digita = input(«Digita una palabra:\n»)
resp = ejemplo.get(digita)
print («tu palabra es\n» + resp)
Esto busca una palabra que se digita en el diccionario y devuelve el valor, pero mi pregunta es si la palabra no esta en el diccionario
como puede añadirla al diccionario al digitarla cual es el mejor metodo he usado el setdefault() pero no he podido implementarlo de forma exitosa agradezco tu respuesta, Saludos
Buenas Antonio.
Con try except creo que te servirá, algo así:
try:
resp = ejemplo[digita]
except KeyError:
resp = input(«Añada el valor: «)
ejemplo[digita] = resp
print («tu palabra es\n» + resp)
Eres un crack!!
Muy buen blog!
Hola quería saber. Si tengo la frase
‘Hola gente del mundo’
dict = {‘1′:’hola’, ‘2’:’mundo’, ‘3’:’gente’}
Quiero que si una de las palabras en mi diccionario se encuentra dentro de mi frase ‘Hola gente del mundo’, devuelva el valor de todos los valores encontrados, es decir, 3 (en este caso).
Si el diccionario solo tuviera el ‘hola’ y ‘gente’ devolviese 2, o así sucesivamente.
¿Es posible?
Buenas Carl.
No sé si te he entendido bien.
Podrías hacer mejor un conjunto con las palabras que quieres buscar como (ya que lo que quieres es encontrar rápido las palabras a contar, las claves no te sirven de mucho):
conjunto_palabras = {"hola", "mundo", "gente"}
Separar las palabras de la frase con split y buscarlas en el conjunto:
contar_encontrados = 0
for palabra in "Hola gente del mundo".split(" "):
contar_encontrados += 1 if palabra in conjunto_palabras else 0
Buenas.
Mejor que un diccionario puedes utilizar un conjunto:
set = {«hola», «gente», «mundo»}
de este modo puedes ver is está contenido en la frase algo así:
palabras = «hola gente de mundo».split(» «)
coincidencias = 0
for palabra in palabras:
if palabra in palabras:
coincidencias += 1
Hola Buenas noches alguien me puede ayudar con esto
1-crea un diccionario donde la clave sea el nombre y el valor sea el número de teléfono. Debe tener 3 claves. Imprima si existe la clave «Jose», sino muestre un mensaje. Imprima si existe el valor «04167449763»’, sino muestre un mensaje.
Podrías crear un diccionario con las claves como nombre y los valores como teléfono. Si sigues el artículo es sencillo, podrías tener algo así:
dic_nombre_telefono = {
«Paco» : «04167449763»,
«Luis» : «14167449763»,
«Sandra» : «24167449763»
}
Y para ver si existe el teléfono, basta con preguntar a la vista de los valores:
if «04167449763» in dic_nombre_telefono.values():
print(«Existe el teléfono»)
Hola. Cómo puedo crear un diccionario donde sus valores sean insertados por el usuario?
Olvidé aclarar que los valores que introduce el usuario deben ser guardados en una lista, por ejemplo:
diccionario = {‘nombre’ : [‘Maria’,’Pedro’]}
He intentado hacerlo con un bucle for pero sobreescribe y solo muestra la última entrada
Si se te está sobreescribiendo en el bucle es porque no lo has inicializado fuera o lo estás sobrescribiendo en cada iteración.
Un ejemplo podría ser para lo que necesitas:
mi_dict = {‘nombre’: []}
for nombre in [«Juan», «Pedro»]:
mi_lista = mi_dict[‘nombre’]
mi_lista.append(nombre)
mi_dict[‘nombre’] = mi_lista
Hola Ely.
Para leer valores insertados por el usuario puedes utilizar input() para leer el valor insertado en consola o una interfaz gráfica en Python como Tkinter https://docs.python.org/3.8/library/tkinter.html
Luego solo te quedaría insertar el valor donde quieras: diccionario, listado, conjunto, etc
Hola Ramón.
Sabes que estoy empezando en python con el tema de los diccionarios, y hay un código similar al que ponen de ejemplo el cual no logro entender.
——————————————————————————
jugadores = {1:’Claudio Bravo’, 2:’Eugenio Mena’ , 3:’Enzo Roco’ , 4:’Mauricio Isla’ , 5:’Francisco Silva’ , 6:’José Pedro Fuenzalida’ ,
7:’Alexis Sánchez’ , 8:’Arturo Vidal’ , 9:’Angelo Sagal’ , 10:’Pedro Pablo Hernández’ , 11:’Eduardo Vargas’ ,
12:’Cristopher Toselli’ ,
13:’Paulo Díaz’ ,
14:’Felipe Gutiérrez’ ,
15:’Jean Beausejour’ ,
16:’Martín Rodríguez’ ,
17:’Gary Medel’ ,
18:’Gonzalo Jara’ , 19:’Leonardo Valencia’ ,
20:’Charles Aránguiz’ ,
21:’Marcelo Díaz’, 22:’Edson Puch’, 23:’Johnny Herrera’}
lesionados = [20,23,9]
for ix in lesionados:
aux = jugadores.pop(ix)
print(len(aux))
———————————–
el resultado del código es 12, que corresponde al largo del string del jugador con la numero 9 (Angelo Sagal). Lo que no entiendo es que declarándose como lesionados al 20, 23 y al 9, solo el print retorne el largo de el ultimo string leído.
Espero me puedas ayudar.
Saludos.
Hola Danilo. Dentro del bucle for, la variable aux se está sobrescribiendo y por eso devuelve el último valor siempre
Puedes concatenar Strings con «+=», por ejemplo:
aux = ""
for ix in lesionados:
aux += jugadores.pop(ix)
Tengo dos listas, una con palabras y un valor aosciado, y otra donde tengo un texto donde tengo que presentar el valor de cada frase.
Entonces, creo que deberia crear un diccionario con las palabras y el valor asociado, pero me fallo en como hacer el link entre el texto y el diccionario, asociando a acada palabra su valor correspondiente y despues recogiendo un unico valor por frase.
Si me pudieras orientar, lo agradeceria mucho.
Para lo que necesitas vas muy bien. Tienes un diccionario con las palabras asociadas al valor y luego una frase que entiendo quieres obtener el valor de las palabras. Entonces, con separar las palabras del frase con split(» «) por el espacio (y puede que antes tengas que remplazar otros símbolos de puntuación por espacios, depende de lo que necesites). Para con un for recorrer cada una de las palabras «spliteadas», obtener el valor desde el diccionario para cada una de esas palabras y utilizar cada uno de sus valores. Un ejemplo rápido en pseudo-código:
mi_dict = {"casa": 5, "Paco": 10, "Otra": 100}
frase = "La casa de Paco"
palabras_separadas = frase.split(" ")
for (palabra in palabras_separadas):
try:
valor_a_utilizar = mi_dict[palabra]
except KeyError:
valor_a_utilizar = 0
Hola, buen día.
Por favor me podrían apoyar con esta duda:
Si tengo una estructura como la siguiente:
F_list=[{‘id’: 1, ‘F_dict’: {‘casa’: 112, ‘carro’: 3, ‘beca’: 13, ‘credito’: 25}}]
Cuál sería la forma más eficiente para contar el número de elementos del diccionario F_dict?
Muchas gracias.
Hola, Buen día.
encontré la respuesta a mi pregunta:
F_list=[{‘id’: 1, ‘F_dict’: {‘casa’: 112, ‘carro’: 3, ‘beca’: 13, ‘credito’: 25}}]
Temp_Dict=F_list[0][‘F_dict’]
print(len(Temp_Dict))
Este código va a imprimir 4, el cual es el número de elementos del diccionario F_dict.
en la instrucción Temp_Dict=F_list[0][‘F_dict’] , está el CERO [0], porqeu F_list es una lista, y el record que tenemos ahí, es el que corresponde a la posición CERO de la lista.
Con len() puedes contar el número de elementos de un diccionario:
numero_elemento_f_dict = len(F_list['F_dict'])
Esto se puede hacer porque dict es un MutableMapping que hereda de Sized (más información en https://jarroba.com/mapeo-mapping-y-mapeo-mutable-mutablemapping-en-python/)
Gracias ! me ayudo !
Me gustaría saber el elemento cuyo valor es máximo. Dado que los diccionarios no se pueden ordenar me estoy liando un poco.
He encontrado la forma:
max(diccionario.values())
Con eso obtengo el valor máximo, pero ahora tendría que buscar la clave a la que corresponde ese valor. Sólo se me ocurre haciendo un bucle recorriendo todos los elementos del diccionario, pero seguro que hay una forma más elegante. La cosa es que sabiendo el valor máximo tengo que hallar la clave, y sería como buscar en un diccionario una clave usando como clave un valor :-S
¿Alguna pista? Saludos.
P.D. Muy buena página, lo que me ha rechinado ha sido lo de "mergear" de "merge". Propongo unir o juntar.
Efectivamente, podrías crear el diccionario inverso (lo que es el valor sea la clave) y con obtener los keys() ordenarlos con sort() y obtener el primer valor ya tendrías el máximo (Advertencia: podrías tener colisiones).
También puedes utilizar el diccionario ordenado OrderedDict (https://docs.python.org/2/library/collections.html#collections.OrderedDict) para realizar una inserción en orden y obtener el último valor pues sería el más alto.
Recorrerlo en bucle tampoco es una mala opción. Con iteritems() (para Python 2 https://docs.python.org/2/library/stdtypes.html#dict.iteritems) en el for obtienes la clave y el valor, quedándote con el valor mayor valdría
Gracias por la sugerencia de remplazo de merge (palabra inglesa) por efectivamente unir o juntar. Aveces utilizamos el spanglish informático por costumbre, mejor evitarlo en lo posible 😉
eres un crack, simplemento muy preciso y congruente con lo que dices 🙂
Buenas noches, quisiera saber como genero un reporte (.txt) a partir de una lista incluida en un diccionario. Muchas gracias