array en php y dict en python son lo mismo?

Tengo un proyecto usando python y quiero convertir php a python. Me he confundido en la variedad de php al convertirlo en python …

en el antiguo código del php … se ve así,

array( "Code" => 122, "Reference" => 1311, "Type" => 'NT', "Amount" => 100.00 ); 

y esto es lo que hice para convertirlo en python …

 dict = { "Code":122, "Reference":1311, "Type":'NT', "Amount":100.00 } 

¿Mi conversión de php a python es correcta?

Su conversión es esencialmente correcta (aunque no usaría dict como un nombre de variable ya que enmascara un constructor de clase incorporado del mismo nombre). Dicho esto, las matrices de PHP son asignaciones ordenadas , por lo que debería usar un OrderedDict de Python en lugar de un dict regular para que se conserve el orden de inserción:

 >>> import collections >>> od = collections.OrderedDict([ ('Code', 122), ('Reference', 1311), ('Type', 'NT'), ('Amount', 100.00), ]) >>> print od['Amount'] 100.0 >>> od.keys() ['Code', 'Reference', 'Type', 'Amount'] 

Para ser específico, una matriz asociativa de PHP es lo mismo que un diccionario de Python, y la matriz asociativa de PHP está ordenada . Las tablas de hash de Ruby son las mismas que las matrices asociativas de PHP (pares ordenados clave-valor).

Las listas de Python y las matrices de PHP son las mismas (listas no ordenadas de valores sin clave). Los arreglos de Ruby son los mismos que Python y PHP.

Los arreglos PHP son diferentes de los objetos py que:

  • Las claves de PHP pueden ser enteros o cadenas (asociativas),
  • Cuando se agrega un valor a una matriz, se asigna automáticamente una tecla numérica antes de agregar el par clave / valor a la matriz. La clave asociada asignada tiene un valor entero que es igual al máximo de las claves de índice del iterador numérico interno de la matriz más 1
  • Las claves de enteros numéricos en cadena se convierten en enteros,
  • El orden de inserción en la matriz se conserva. Los pares clave / valor se repiten de acuerdo con el orden de inserción de las claves. Podemos usar Python’s OrderedDict para emular,
  • PHP array[] = 5 se traduce a Python array.append(5) o array[None] = 5 ,
  • Las claves de índice del iterador se manipulan a través de las funciones incorporadas de PHP, o se pasan por referencia, con una política de copia en escritura.

Me gustaría ponerle un tapón a mi módulo Python de pyx.php recientemente lanzado. Hay una array clase Python en el módulo que emula una matriz de PHP. Nuestra emulación de Python de la matriz PHP utiliza una variable de instancia OrderedDict, donde array._obj es un OrderedDic para almacenar todos los elementos de la matriz y realizar un seguimiento de sus órdenes de inserción utilizando una variable de instancia de puntero personalizado. Tratar:

 $ git clone https://github.com/wordpy/pyx/ $ python # or ipython` >>> import pyx.php as Php; array = Php.array >>> arr1 = array( (0,'1-0'),('a','1-a'),('b','1-b'),) >>> arr2 = array( (0,'2-0'),( 1,'2-1'),('b','2-b'),('c','2-c'),) >>> arr1 + arr2 # same as: Php.array_plus(arr1, arr2), see below >>> Php.array_merge(arr1, arr2) >>> import pyx.php as Php; array = Php.array >>> Arr0 = array() # Arr0._obj is an empty OrderedDict() >>> Arr1 = array( ('a',11), 'zzz', (99,99), 22, 33, (2,22) ) >>> Arr1 array(6) { ['a']=>  11 [0]=>  zzz [99]=>  99 [100]=>  22 [101]=>  33 [2]=>  22 } 

zip() funciona para array con diferentes len !!!

 >>> for i,j in zip( array(1,2,3,4), array(11,22,33) ): ... print(i,j) 1 11 2 22 3 33 >>> for i,j in zip( array(1,2), array(11,22,33) ): ... print(i,j) 1 11 2 22 

array() en el módulo pyx.php Cython ofrece casi todo lo que ofrece un array PHP (), además de muchos otros métodos. Consulte https://wordpy.com/pyx/php/ .

Actualmente, pyx.php solo está disponible para Python 3.x que ejecuta Linux de 64 bits. Python 2.x, Mac u otras plataformas se pueden comstackr cuando hay muchas solicitudes.