¡Hola!
En la lección 30 del manual de R.Narvaja, en la penúltima página, aparece un ejemplo en el que, para crear una salida con el nombre y salario de cada empleado, hace lo siguiente:
Citar
lista={'Pepe':'I','Jose':'E','Pirulo':'I','Jorge':'E','Salvador':'E'}
for emp in lista:
if lista[emp]=='E':
a= Empleados(emp)
a.computarSueldo()
print a.empleado, a.sueldo
else:
a= Ingenieros(emp)
a.computarSueldo()
print a.empleado, a.sueldo
Se entiende perfectamente, pero al imprimir el orden en el que salen es:
Citar
Jose 2000
Pirulo 3000
Pepe 3000
Jorge 2000
Salvador 2000
Por más vueltas que le doy al tema no consigo averiguar el por qué de esta ordenación. ¿Podría alguien aclararlo?
Saludos
La ordenación de las entradas clave/valor en un diccionario o hash, es "aleatorio" (depende del cómputo del valor hash interno).
Cita de: ViejoMajara en 21 Marzo 2015, 12:35 PM
Por más vueltas que le doy al tema no consigo averiguar el por qué de esta ordenación. ¿Podría alguien aclararlo?
Saludos
sinceramente me he quedado con la duda... sera algun tipo de error de python... :huh:
MISMO CODIGO:
lista={'Pepe':'I',' Jose':'E', 'Pirulo':'I', 'Jorge':'E', 'Salvador':'E'}
class Empleados:
def __init__(self,nombre):
self.empleado = nombre
def computarSueldo(self):
self.sueldo=2000
class Ingenieros (Empleados):
def __init__(self,nombre):
self.empleado= nombre
def computarSueldo(self):
self.sueldo = 3000
for emp in lista:
print(emp)
if lista[emp]=='E':
a= Empleados(emp)
a.computarSueldo()
print (a.empleado, a.sueldo)
else:
a= Ingenieros(emp)
a.computarSueldo()
print(a.empleado, a.sueldo)
DISTINTOS RESULTADOS: :huh: :huh: :huh: :huh: :huh:
>>> ================== RESTART ===================
>>>
Pepe
Pepe 3000
Pirulo
Pirulo 3000
Jorge
Jorge 2000
Jose
Jose 2000
Salvador
Salvador 2000
>>> ========================= RESTART===========================
>>>
Jorge
Jorge 2000
Pirulo
Pirulo 3000
Jose
Jose 2000
Pepe
Pepe 3000
Salvador
Salvador 2000
>>> ===================== RESTART ======================
>>>
Pepe
Pepe 3000
Jorge
Jorge 2000
Salvador
Salvador 2000
Jose
Jose 2000
Pirulo
Pirulo 3000
>>> ================================ RESTART ================================
>>>
Pepe
Pepe 3000
Jose
Jose 2000
Jorge
Jorge 2000
Pirulo
Pirulo 3000
Salvador
Salvador 2000
>>> ================================ RESTART ================================
>>>
Jose
Jose 2000
Pepe
Pepe 3000
Jorge
Jorge 2000
Salvador
Salvador 2000
Pirulo
Pirulo 3000
>>> ================================ RESTART ================================
>>>
Jorge
Jorge 2000
Pepe
Pepe 3000
Salvador
Salvador 2000
Jose
Jose 2000
Pirulo
Pirulo 3000
>>> ==================== RESTART========================
>>>
Salvador
Salvador 2000
Jose
Jose 2000
Jorge
Jorge 2000
Pepe
Pepe 3000
Pirulo
Pirulo 3000
>>>
Cita de: explorer en 21 Marzo 2015, 18:06 PM
La ordenación de las entradas clave/valor en un diccionario o hash, es "aleatorio" (depende del cómputo del valor hash interno).
Pensé que con el lista.update se solucionaría... pero es igual
Este comportamiento no es algo propio de Python. En Perl pasa lo mismo con los hash:
$ perl -E '%x = ( a => 1, b => 2, c => 3); say "$_ => $x{$_}" for keys %x'
b => 2
a => 1
c => 3
$ perl -E '%x = ( a => 1, b => 2, c => 3); say "$_ => $x{$_}" for keys %x'
c => 3
b => 2
a => 1
Se trata de una medida de seguridad (los diccionarios o hashes se usan con temas de contraseñas, control de sesiones, etc.). Si fuera predecible el orden en que salen los pares clave/valor, se podría suplantar o robar información.
Existen bibliotecas que permiten recuperar la información en el mismo orden en que fue grabada. En Perl, por ejemplo, está Tie::IxHash (https://metacpan.org/pod/Tie::IxHash).
¡Hola!
Soy novato en Python y jamás hubiese imaginado que se pudiesen producir salidas aleatorias sin proponerlas explícitamente.
Asunto solventado.
Saludos.
Cita de: explorer en 22 Marzo 2015, 03:25 AM
Este comportamiento no es algo propio de Python. En Perl pasa lo mismo con los hash:
$ perl -E '%x = ( a => 1, b => 2, c => 3); say "$_ => $x{$_}" for keys %x'
b => 2
a => 1
c => 3
$ perl -E '%x = ( a => 1, b => 2, c => 3); say "$_ => $x{$_}" for keys %x'
c => 3
b => 2
a => 1
Se trata de una medida de seguridad (los diccionarios o hashes se usan con temas de contraseñas, control de sesiones, etc.). Si fuera predecible el orden en que salen los pares clave/valor, se podría suplantar o robar información.
Existen bibliotecas que permiten recuperar la información en el mismo orden en que fue grabada. En Perl, por ejemplo, está Tie::IxHash (https://metacpan.org/pod/Tie::IxHash).
Grade Gracias por la explicación... ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)