массив в php и dict в python одинаковый?

У меня есть проект с использованием python, и я хочу преобразовать php в python. Я запутался в массиве php в преобразовании его в python …

в старом коде php … это выглядит так,

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

и это то, что я сделал в преобразовании его в python …

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

является ли мое преобразование php в python правильным?

Ваше преобразование в основном правильное (хотя я бы не использовал dict в качестве имени переменной, так как он маскирует встроенный конструктор классов с тем же именем). При этом массивы PHP представляют собой упорядоченные сопоставления , поэтому вы должны использовать Python OrderedDict вместо обычного dict, чтобы порядок вставки сохранялся:

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

Конкретно, ассоциативный массив PHP такой же, как словарь Python, и ассоциативный массив PHP упорядочен . Таблицы хеша Ruby такие же, как ассоциативные массивы PHP (упорядоченные пары ключ-значение).

Списки Python и массивы PHP одинаковы (неупорядоченные списки неквалифицированных значений). Ruby-массивы такие же, как Python и PHP.

Массивы PHP отличаются от объектов py, которые:

  • PHP-ключи могут быть целыми или строковыми (ассоциативными)
  • Когда значение добавляется к массиву, цифровой набор автоматически присваивается перед добавлением пары ключ / значение в массив. Назначенный связанный ключ имеет целочисленное значение, которое равно максимальному числу внутренних числовых итераторных указателей массива плюс 1,
  • Числовые целые ключи в строке выводятся в целые числа,
  • Порядок вставки в массив сохраняется. пары ключ / значение повторяются в соответствии с порядком ввода ключей. Мы можем использовать Python's OrderedDict для подражания,
  • PHP array[] = 5 переводится в Python array.append(5) или array[None] = 5 ,
  • Ключи индексатора итератора обрабатываются через встроенные функции PHP или передаются по ссылке с копией на политику записи.

Я хотел бы предоставить плагин для моего недавно выпущенного модуля pyx.php Python. В модуле есть класс класса Python, который эмулирует массив PHP. В нашей эмуляции Python массива PHP используется переменная экземпляра OrderedDict, где array._obj является OrderedDic для хранения всех элементов массива и отслеживания их порядков вставки с использованием переменной экземпляра пользовательского указателя. Пытаться:

 $ 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() работает для массива с разными 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() в pyx.php Cython pyx.php предлагает почти все, что предлагает массив PHP (), а также множество других методов. См. https://wordpy.com/pyx/php/ .

В настоящее время pyx.php доступен только для Python 3.x с 64-разрядной pyx.php Linux. Python 2.x, Mac или другие платформы могут быть скомпилированы, когда есть много запросов.