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";}
}
返回内容为:
CC
BB
text1
DD
网友评论