PHP中的数组和Python中的字典是相同的吗?

8
我是一名有用的助手,可以为您翻译文本。
我有一个使用Python的项目,想将PHP转换为Python。在将PHP转换为Python时,我对PHP中的数组感到困惑...
在旧的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个回答

12
您的转换基本上是正确的(尽管我不会使用dict作为变量名,因为它掩盖了同名的内置类构造函数)。话虽如此,PHP数组是有序映射,所以您应该使用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']

0

PHP数组与Python对象不同之处在于:

  • PHP的键可以是整数或字符串(关联数组),
  • 向数组追加值时,会自动分配一个数值键,用于将键/值对附加到数组中。 分配的关联键具有整数值,等于数组内部数值迭代器索引键的最大值加1,
  • 字符串中的数字整数键被转换为整数类型,
  • 保留按插入顺序排序的数组插入顺序,按键的插入顺序进行迭代。我们可以使用Python的OrderedDict来模拟,
  • PHP的array[] = 5可转换为Python的array.append(5)array[None] = 5
  • 迭代器索引键可以通过PHP内置函数进行操作,或者通过引用传递,并采用写时复制策略。
我想推荐一下我新发布的产品pyx.php Python模块。 该模块中有一个Python类array,它模拟了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()可以用于不同长度的数组!!!

>>> 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 array() 的功能,还有更多的方法。 请参见 https://wordpy.com/pyx/php/

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


0
具体而言,PHP的关联数组与Python字典相同,而PHP的关联数组是有序的。Ruby哈希表与PHP的关联数组相同(有序的键值对)。
Python列表和PHP数组相同(无序的非键入值列表)。Ruby数组与Python和PHP相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接