-3

在 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 中做同样的事情?

4

3 回答 3

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,
    ),
)
于 2013-04-02T17:24:34.460 回答
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
于 2013-04-02T17:24:06.427 回答
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,
    },
}

重要的一点是在赋值的行上打开大括号=,这将告诉编译器继续语句/表达式,直到找到匹配的大括号。

于 2013-04-02T17:24:19.490 回答