在Perl初始化中,哈希的哈希值如下所示:
my %data_ops = (
data1 => {
conv_to_num => \&data1_to_num,
conv_to_str => \&data1_to_str,
gen_rand_val => \&data1_gen_rand,
},
data2 => {
conv_to_num => \&data2_to_num,
conv_to_str => \&data2_to_str,
gen_rand_val => \&data2_gen_rand,
},
);
有没有办法在Python中做同样的事情?
答案 0 :(得分:5)
默认的dict文字语法没有错:
data_ops = {
'data1': {
'conv_to_num': data1_to_num,
'conv_to_str': data1_to_str,
'gen_rand_val': data1_gen_rand,
},
'data2': {
'conv_to_num': data2_to_num,
'conv_to_str': data2_to_str,
'gen_rand_val': data2_gen_rand,
},
}
或者您可以使用dict()
构造函数,前提是您的密钥也是有效的python标识符:
data_ops = dict(
data1=dict(
conv_to_num=data1_to_num,
conv_to_str=data1_to_str,
gen_rand_val=data1_gen_rand,
),
data2=dict(
conv_to_num=data2_to_num,
conv_to_str=data2_to_str,
gen_rand_val=data2_gen_rand,
),
)
答案 1 :(得分:0)
等效的Python可能看起来像这样(我只是使用常量来清楚地显示结构):
data_ops = {
'data1': {
'conv_to_num': 1,
'conv_to_str': '1',
'gen_rand_val': 6,
},
'data2': {
'conv_to_num': 2,
'conv_to_str': '2',
'gen_rand_val': 3,
},
}
显示访问权限的示例:
>>> data_ops['data1']['conv_to_num']
1
>>> data_ops['data2']['gen_rand_val']
3
答案 2 :(得分:0)
抱歉,没有办法在Python中使用Perl语法。但是,当然,您可以在Python中初始化dicts。
data_ops = {
data1: {
"conv_to_num": data1_to_num,
"conv_to_str": data1_to_str,
"gen_rand_val": data1_gen_rand,
},
data2: {
"conv_to_num": data2_to_num,
"conv_to_str2: data2_to_str,
"gen_rand_val": data2_gen_rand,
},
}
重要的一点是使用=
赋值打开行上的大括号,这将告诉编译器继续语句/表达式,直到找到匹配的大括号。