perl 中 hash 与python 中dict 形式似乎一样,不过perl 中为一维hash ,默认是不支持二维字典的,需要借用 reference 来实现;剧透下(reference 可以理解为内存地址,就是二维字典里value 存放的内存位置,利用解引用来获得)
(1)首先,python 中存储和读取二维字典dict;则是利用嵌套存储字典的方式
dict_temp = dict() key_tmp = "aaa" key2_tmp= "bbb" dict_temp[key_tmp]=dict()# 设置value 值 为字典 #dict_temp[key_tmp]={} dict_temp[key_tmp][key2_tmp]="value" print (dict_temp ) print (dict_temp[key_tmp] )
输出内容为:
{'aaa': {'bbb': 'value'}} {'bbb': 'value'}
perl 中的使用没有python 方便, 涉及到 二维hash 的 字典,需要说明一种写法;perl 中写法比较多
$hash{'A'}{'B'} = 'sth';
$hash{'A'}->{'B'} = 'sth'; 如果 print $hash{'A'} 得到的是hashref HASH(0x1dd97f0)
ARRAY(0x1dd97f0) 则为 arrayref
已知 key1,想遍历 key2 ;涉及到 解引用 的方法, 其实就是把 hashref(ARRAY(0x1dd97f0))转换为真正的目标内嵌的hash,对于python 的结果 ,获得{'bbb': 'value'} 这个hash
补充解法, 将下列符号放在 内容是reference 的变量 前面 就 代表将这个reference 变成这个类型
% 代表整个 hash 哈希,使用{} 代表 (python dict)
@ 代表整个 array 数组,使用 [] 代表 (python list)
$ 代表 一个标量 (python 中普通变量)
& 代表一个子函数 (python 中 def 函数)$reference=$hash['A'] #$hash['A']['B']= 'sth'; $$reference{'key'}; #取 二维hash 的 value; 平常就是 $hash['A'],$reference 就代表 $hash['A']内容 所以加个$, my @array; my $reference=\@array; #加\表示 引用,主要用在函数的参数是 数组或 哈希字典时 $$reference[index]; #平常取数组 元素 就是 $array[index]
另外的 也可以直接用 -> 符号解
$reference=$hash['A'] #$hash['A']['B']= 'sth'; $reference->{'key'}; #取 二维hash 的 value my @array; my $reference=\@array; #加\表示 引用,主要用在函数的参数是 数组或 哈希字典时 $reference->[index];
my $key1="AA"; my $key2="BB"; my $key3="CC"; my $key4="DD"; my %hash; $hash{$key1}{$key2}="text1"; $hash{$key1}{$key3}="text2"; $hash{$key1}{$key4}="text3"; $hash{$key2}{$key1}="A1"; $hash{$key2}{$key3}="B2"; $hash{$key2}{$key4}="C3"; my $hash_ref=$hash{$key1}; foreach my $el (keys %$hash_ref){ print "$el\n"; if($el eq "BB"){print "$hash{$key1}{$el}\n";}
返回内容为:
text1