2012-01-24 14 views
6

Ho un progetto che usa python e voglio convertire il php in python. Ho confuso nella matrice di php a convertirlo in python ...in php e dict in python sono gli stessi?

nel vecchio codice del php ... sembra che questo,

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

e questo è quello che ho fatto nella conversione che a Python ...

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

è il mio php conversione in pitone è corretta?

risposta

12

La conversione è sostanzialmente corretta (anche se non utilizzerei dict come nome di variabile dal momento che maschera un costruttore di classi built-in con lo stesso nome). Detto questo, PHP arrays sono mappature ordinate, quindi è necessario utilizzare un Python OrderedDict invece di un dict regolare in modo che l'ordine di inserimento viene conservata:

>>> 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

essere specifici, un PHP associativo array è il come un dizionario Python e l'array associativo PHP è ordinato. Le tabelle di hash rubino sono le stesse degli array associativi di PHP (coppie chiave-valore ordinate).

Gli elenchi Python e gli array PHP sono gli stessi (elenchi non ordinati di valori senza chiave). Gli array di Ruby sono gli stessi di Python e PHP.

0

array PHP sono diversi dagli oggetti py che:

  • chiavi PHP possono essere interi o stringhe (associativi),
  • Quando un valore viene aggiunto a una matrice, un tasto numerico è automaticamente assegnato prima aggiunta della coppia chiave/valore all'array. La chiave associata assegnato ha un valore intero che è uguale al massimo di chiavi indice iteratori numerico interne della matrice più 1,
  • chiavi intere numerici nella stringa vengono colate in numeri interi,
  • L'ordine di inserimento alla matrice è conservato . le coppie chiave/valore sono iterate in base all'ordine di inserimento delle chiavi. Possiamo usare OrderedDict di Python per emulare,
  • PHP array[] = 5 è tradotto in Python array.append(5) o array[None] = 5,
  • Le chiavi di indice iteratore vengono manipolati tramite PHP funzioni built-in, o vengono passati per riferimento, con una copia su scrivere la politica.

Mi piacerebbe dare una spina al mio nuovo prodotto pyx.php modulo Python. Esiste una classe Python array nel modulo che emula un array PHP. La nostra emulazione Python dell'array PHP utilizza una variabile di istanza OrderedDict, dove array._obj è un OrderedDic per memorizzare tutti gli elementi dell'array e tiene traccia dei propri ordini di inserimento utilizzando una variabile di istanza del puntatore personalizzata .Prova:

$ 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() lavori per array con diversi 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() nel modulo pyx.php Cython offre quasi tutto ciò che un array PHP() offre, oltre a molti altri metodi. Vedere https://wordpy.com/pyx/php/.

Attualmente, pyx.php è disponibile solo per Python 3.x in esecuzione su Linux a 64 bit. Python 2.x, Mac o altre piattaforme possono essere compilate quando ci sono molte richieste .

Problemi correlati