php中的array和python中的dict是相同的


array in php and dict in python are the same?

我有一个使用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
  • 字符串中的数字整数键被强制转换为整数
  • 将保留插入数组的顺序。键/值对是根据键的插入顺序进行迭代。我们可以使用PythonOrderedDict进行仿真
  • PHP array[] = 5被翻译成Python array.append(5)或CCD_ 3
  • 迭代器索引键是通过PHP内置函数操作的,或者通过引用传递,并带有写时复制策略

我想给我新发布的产品pyx.phpPython模块一个插件。模块中有一个Python类array,用于模拟PHP数组。我们对PHP数组的Python模拟使用了一个OrderedDict实例变量,其中数组_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()适用于不同长度的数组!!!

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

pyx.php Cython模块中的array()几乎提供了PHP数组()提供了,以及更多的方法。请参阅https://wordpy.com/pyx/php/.

目前,pyx.php仅适用于运行64位Linux的Python3.x。Python 2.x、Mac或其他平台可以在有许多请求。