2011-04-15 55 views
4

假设我定义为这样的结构:如何初始化从字典一个struct在用Cython

cdef extern from "blah.h": 
    struct my_struct: 
     int a 
     int b 

我需要能够转换dictmy_struct,而不承担my_struct的领域的知识。换句话说,我需要以下的转换发生:

def do_something(dict_arg): 
    cdef my_struct s = dict_arg 
    do_somthing_with_s(s) 

的问题是,用Cython不会做到这一点:http://docs.cython.org/src/userguide/language_basics.html#automatic-type-conversions

当然,如果我有对my_struct字段的名称的知识,我可以做到这一点:

def do_something(dict_arg): 
    cdef my_struct s = my_struct(a=dict_arg['a'], b=dict_arg['b']) 
    do_somthing_with_s(s) 

这样做崩溃用Cython编译:

def do_something(dict_arg): 
    cdef my_struct s = my_struct(**dict_arg) 
    do_somthing_with_s(s) 

我不知道字段名称的原因是因为代码是自动生成的,我不想做一个丑陋的黑客来处理这种情况。

如何使用Cython从Python字典中初始化结构?

+0

它是否必须是名称?你可以按顺序做,而是使用联合(具有已知长度的数组)? – 2011-04-15 06:59:09

回答

6

您必须手动设置结构的每个元素。没有捷径。 如果您的代码是自动生成的,那么应该很容易自动生成一个内联函数, 执行从PyDict到每个结构的转换。