2012-01-24 22 views
6

Tengo un proyecto que usa python y quiero convertir el php a python. Me he confundido en la matriz de PHP en la conversión a pitón ...array en php y dict en python son lo mismo?

en el viejo código del php ... se parece a esto,

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

y esto es lo que hice en la conversión es a pitón ...

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

es mi conversión de php a python es la correcta?

Respuesta

12

Su conversión es esencialmente correcta (aunque no utilizaría dict como nombre de variable, ya que enmascara un constructor de clase incorporado del mismo nombre). Dicho esto, PHP arrays son asignaciones ordenadas, lo que debe utilizar un Python OrderedDict en lugar de un diccionario regular, de manera que el orden de inserción se conserva:

>>> 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'] 
0

Para ser más específicos, un PHP asociativo matriz es el lo mismo que un diccionario de Python, y la matriz asociativa de PHP es ordenado. Las tablas hash de Ruby son las mismas que las matrices asociativas de PHP (pares clave-valor ordenados).

Las listas de Python y las matrices de PHP son las mismas (listas desordenadas de valores sin clave). Las matrices de Ruby son las mismas que Python y PHP.

0

arrays PHP son diferentes de los objetos py que:

  • teclas PHP pueden ser números enteros o cadenas (asociativos),
  • Cuando un valor se añade a una matriz, una tecla numérica es automáticamente asignado antes añadiendo el par clave/valor a la matriz. La clave asociada asignado tiene un valor entero que es igual a la máxima de claves de índice iterador numérico interno de la matriz más 1,
  • claves enteras numéricos en cadena están fundidas en enteros,
  • El orden de inserción a la matriz se conserva . los pares clave/valor son iterados de acuerdo con el orden de inserción de las claves. Podemos utilizar OrderedDict de Python para emular,
  • PHP array[] = 5 se traduce a Python array.append(5) o array[None] = 5,
  • Las claves de índice iterador se manipulan a través de PHP funciones incorporadas, o se pasan por referencia, con una copia en escribir política.

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

$ 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']=> <int> 11 
    [0]=> <str> zzz 
    [99]=> <int> 99 
    [100]=> <int> 22 
    [101]=> <int> 33 
    [2]=> <int> 22 
} 

zip() funciona para la matriz 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 una matriz PHP() ofrece, además de muchos más métodos. Consulte https://wordpy.com/pyx/php/.

Actualmente, pyx.php sólo está disponible para Python 3.x corriendo Linux de 64 bits. Python 2.x, Mac u otras plataformas se pueden compilar cuando hay muchas solicitudes .

Cuestiones relacionadas