🐍

PHPの連想配列と、Pythonの辞書を比較する

2022/02/01に公開約2,500字

定義記法

キーと値のペアで定義します。

PHP
$car = [
    'brand' => 'Ford',
    'model' => 'Mustang',
    'year' => 1964
];
Python
car = {
  'brand': 'Ford',
  'model': 'Mustang',
  'year': 1964
}

キーまたは値のみの取得

PHP
# キーの配列
$keys = array_keys($car);

# 値の配列
$values = array_values($car);
Python
# キーのリスト
keys = car.keys()

# 値のリスト
values = car.values()

要素数の取得

PHP
$length = count($car);
Python
length = len(car)

Indexの取得

PHP
// By key
$index = array_search('year', array_keys($car));

// By value
$index = array_search(1964, array_values($car));
Python
# By key
index = list(car.keys()).index('year')

# By value
index = list(car.values()).index(1964)

ループ展開

PHP
foreach ($car as $key => $value) {
    echo $key . ': ' . $value;
}
Python
for key, value in car.items():
    print(str(key) + ': ' + str(value))

要素の追加(更新)

PHP
$car['color'] = 'red';
Python
car['color'] = 'red'

要素の削除

PHP
// By key
unset(car['brand']);

// By value
$car = array_filter($car, function($val) {
    return ($val !== 'Mustang');
});

// By values
$values = array('Mustang', 1964);
$car = array_filter($car, function($val) use ($values) {
    return (in_array($val, $values) === false);
});
Python
# By key
car.pop('brand')

# By value
car = {key:val for key, val in car.items() if val != 'Mustang'}

# By values
car = {key:val for key, val in car.items() if val not in ['Mustang', 1964]}

ソート

PHP
// By key ASC, DESC
ksort($car);
krsort($car);

// By value ASC, DESC
sort($car);
rsort($car);
Python
# By key ASC, DESC
car = dict(sorted(car.items())
car = dict(sorted(car.items(), reverse=True))

# By value ASC, DESC
car = dict(sorted(car.items(), key=lambda item: str(item[1])))
car = dict(sorted(car.items(), key=lambda item: str(item[1]), reverse=True))

JSONエンコード・デコード

PHP
// 連想配列をJSON文字列に変換する
$jsonString = json_encode($car);

// JSON文字列を連想配列に変換する
$car = json_decode($jsonString, true);
Python
# 辞書をJSON文字列に変換する
import json
json_string = json.dumps(car)

# JSON文字列を辞書に変換する
import json
car = json.loads(json_string)

オブジェクトへの変換

PHP
// stdClass object
$car = (object)$car;
$brand = $car->brand;
Python
# OrderedDict object
import collections
car = collections.namedtuple('Car', car.keys())(*car.values())
brand = car.brand

PHPのクラスとPythonのクラスについて

Discussion

ログインするとコメントできます