ハッシュと辞書型
perlのハッシュとはキーとそれに対応する値からなるデータ構造で
以下のように表すみたい。
my %hash = ( 'Taro' => 26, 'Hanako' => 23, 'Ichiro' => 32, );
pythonではハッシュに対応するのは辞書型で、
hash = {"Taro" : 26, "Hanako" : 23, "Ichiro" : 32}
のようにするみたい。
キーから値を取り出して表示するには、perlでは
print $hash{'Taro'};
pythonでは
print hash["Taro"]
とすれば26と表示された。
perlでハッシュのキーと値の組を表示させるには、
ハッシュに含まれるすべてのキーからなるリストを返す関数keysを使って
foreach my $key (keys(%hash)) { my $value = $hash{$key}; print "$key -> $value\n"; }
とすればよいみたいなので、pythonではkeysメソッドを使って
for key in hash.keys(): print "%s -> %d" %(key, hash[key])
とすれば
Hanako -> 23 Taro -> 26 Ichiro -> 32
と出力される。
ちなみに値をすべて得るにはvaluesメソッドで
hash.values()
とするみたい。
perlでハッシュへの新しいキーと値の組を追加するときは、
$hash{'Jiro'} = 28;
とするみたいで、pythonの辞書型では
hash["Jiro"] = 28
とすればよいみたい。
perlの1つのハッシュ中に同一のキーが2つ存在することはできなくて、
存在しているキーを使って代入をすると元の値は失われてしまうみたい。
これはpythonの辞書型でも同じみたい。
キーの重複がない性質を利用してリスト中の要素の中で重複するものを
1つにまとめたリストを以下のように書けばできた。
uniq = {} array = [3,1,4,1,5,9,2,6,5,3,5] for item in array: uniq[item] = 1 print uniq.keys()
実行結果は
[1, 2, 3, 4, 5, 6, 9]
となる。
この他pythonではキーに対応する値の削除にはdel文を、
すべてのキーと値を削除するにはclearメソッドを使えばよいみたい。
>>> hash = {"Taro" : 26, "Hanako" : 23, "Ichiro" : 32} >>> del hash["Taro"] >>> hash {'Hanako' : 23, 'Ichiro' : 32} >>> hash.clear() >>> hash {}