漂亮的字典初始化(Perl风格)

时间:2013-04-02 17:20:51

标签: python dictionary

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

3 个答案:

答案 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,
    },
}

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