Python - Consulta diccionario

 
Vista:
Imágen de perfil de Gary

Consulta diccionario

Publicado por Gary (15 intervenciones) el 12/10/2022 05:54:01
Hola a todos tengo una duda

Tengo este código:

1
2
3
4
5
6
7
8
9
def menora_78(mydict):
    for mydict.values in mydict.items():
        if mydict.values() <= 77:
            del mydict[]
        return mydict
    print(mydict)
 
diccionario = {'gary' : 100, 'juan' : 100, 'otro' : 77}
menora_78(diccionario)

No tengo idea por qué no me funciona, lo que quiero es que elimine del diccionario a quien tenga menos de 78 en el valor y me imprima las claves.

¿Qué cambiarían ustedes?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de algoritmo
Val: 819
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Consulta diccionario

Publicado por algoritmo (33 intervenciones) el 12/10/2022 11:17:14
Hola.

Tienes muchos errores. Te comento:

- No tiene sentido interar por 'mydict.values'
- La variable que itera no puede ser una función.
- No puedes realizar un 'return' en el bucle antes de finalizarlo.

Te escribo mi propuesta.

Saludos :)

1
2
3
4
5
6
7
8
9
10
11
12
## mydict.items() = [('otro', 77), ('juan', 100), ('gary', 100)]
##  mydict.values() = [77, 100, 100]
## mydict.values = <built-in method values of dict object at 0x026B2780>
 
def menora_78(mydict):
    for key in mydict.keys():
        if mydict[key] <= 77:
            mydict.pop(key)
    return mydict
 
diccionario = {'gary' : 100, 'juan' : 100, 'otro' : 77}
print menora_78(diccionario)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Consulta diccionario

Publicado por antonio (65 intervenciones) el 12/10/2022 11:32:53
Hola buenas en un diccionario no puedes eliminar mientras iteras sobre el de todas formas en el código hay un error en el del que no pones que elementos estas iterando, te paso el código pero te recomiendo mirar esta pagina web https://www.techiedelight.com/es/remove-items-from-dictionary-while-iterating-python/ :


1
2
3
4
5
6
7
8
def menora_78(mydict):
    mydict2=mydict.copy()
    for i in mydict2.keys():
        if mydict2[i]<=77:
            del mydict[i]
    print(mydict)
diccionario = {'gary' : 100, 'juan' : 100, 'otro' : 77}
menora_78(diccionario)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Consulta diccionario

Publicado por tincopasan (1082 intervenciones) el 12/10/2022 15:49:07
Hay muchas formas de encarar esto:
1)está bueno usar return en las funciones y no un simple print, aunque no es obligatorio
2)no me gusta escribir tanto código para algo tan simple

1
2
3
4
5
6
7
diccionario = {'gary' : 100, 'juan' : 100, 'otro' : 77}
 
def menor(dic):
    return {clave:valor for clave,valor in dic.items()  if valor >78}
 
diccionario = menor(diccionario)
print(diccionario)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Gary

Consulta diccionario

Publicado por Gary (15 intervenciones) el 13/10/2022 01:43:33
Excelente, se redujo muchísimo las lineas escritas.

Si tengo varios valores en las claves, sigue el mismo método o cambiaría?
por ejemplo
diccionario = {'gary' : [100, 99, 89], 'juan' : [100, 100, 98], 'otro' : [77, 60, 68]}
no me queda muy claro el funcionamiento, creo que me pondré a estudiar. Gracias por compartir tu conocimiento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Consulta diccionario

Publicado por tincopasan (1082 intervenciones) el 13/10/2022 04:25:48
en ese caso el valor es una lista, asi que pódes elegir sobre cual de esos valores querés comparar en este caso con el que ocupa el índice uno de la lista:

1
return {clave:valor for clave,valor in dic.items()  if valor [1]>61}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Gary

Consulta diccionario

Publicado por Gary (15 intervenciones) el 13/10/2022 04:57:03
Gracias!
Ya entendí el concepto.

para todos los valores de una pude hacer este código:

1
2
3
4
5
6
7
8
9
def menora_78(dic):
    est = []
    for clave,valor in dic.items():
        if valor [0]>77 and valor[1]>77 and valor[2]>77:
            est.append(clave)
    print(est)
 
diccionario = {'gary' : [100, 99, 89], 'juan' : [100, 100, 98], 'otro' : [77, 60, 68]}
print(menora_78(diccionario))

pero no logro compactarlo en 1 solo como usted lo hace, intentaré varias soluciones. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Consulta diccionario

Publicado por tincopasan (1082 intervenciones) el 13/10/2022 14:52:27
te recomiendo que estudies el manejo de listas.
En el caso de querer comparar con toda la lista, alcanza con saber cual es el valor mínimo y no comparar con cada uno de ellos:
1
2
3
4
5
6
def menor(dic):
    return {clave:valor for clave,valor in dic.items()  if min(valor) > 77}
 
diccionario = {'gary' : [100, 99,89], 'juan' : [100, 100, 98], 'otro' : [77, 60, 68]}
diccionario = menor(diccionario)
print(diccionario)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar