php中的数组和python中的dict是一样的吗?

时间:2012-01-24 02:14:27

标签: php python arrays

我有一个使用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是正确的吗?

3 个答案:

答案 0 :(得分:11)

您的转换基本上是正确的(尽管我不会将 dict 用作变量名,因为它会掩盖同名的内置类构造函数)。话虽如此,PHP arrays有序映射,因此您应该使用Python OrderedDict而不是常规字典,以便保留插入顺序:

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

答案 1 :(得分:0)

具体而言,PHP 关联数组与Python字典相同,PHP关联数组有序。 Ruby哈希表与PHP关联数组(有序键值对)相同。

Python列表和PHP数组是相同的(非键控值的无序列表)。 Ruby数组与Python和PHP相同。

答案 2 :(得分:0)

PHP数组与py对象不同:

  • PHP密钥可以是整数或字符串(关联),
  • 将值附加到数组时,会自动生成数字键 在将键/值对附加到数组之前分配。 分配的关联键具有等于最大值的整数值 数组的内部数字迭代器索引键加1,
  • 字符串中的数字整数键被转换为整数,
  • 保留了插入阵列的顺序。键/值对是 根据键的插入顺序迭代。我们可以使用Python OrderedDict来模仿,
  • PHP array[] = 5已翻译为Python array.append(5)array[None] = 5
  • 迭代器索引键是通过PHP内置函数操作的,或者 通过引用传递,并在写策略上复制。

我想为我新发布的产品pyx.php Python模块提供一个插件。 模块中有一个Python类array,用于模拟PHP数组。 我们对PHP数组的Python模拟使用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() Cython模块中的

pyx.php提供了几乎所有内容 PHP array()提供了更多的方法。 请参阅https://wordpy.com/pyx/php/

目前,pyx.php仅适用于运行64位Linux的Python 3.x. 当有很多时,可以编译Python 2.x,Mac或其他平台 请求。