如何在cython中从dict初始化结构

Nic*_*not 6 struct cython

假设我有一个如此定义的结构:

cdef extern from "blah.h":
    struct my_struct:
        int a
        int b
Run Code Online (Sandbox Code Playgroud)

我需要能够将转换dictmy_struct,而不承担my_struct的领域的知识.换句话说,我需要进行以下转换:

def do_something(dict_arg):
    cdef my_struct s = dict_arg
    do_somthing_with_s(s)
Run Code Online (Sandbox Code Playgroud)

问题是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)
Run Code Online (Sandbox Code Playgroud)

这样做会使cython编译器崩溃:

def do_something(dict_arg):
    cdef my_struct s = my_struct(**dict_arg)
    do_somthing_with_s(s)
Run Code Online (Sandbox Code Playgroud)

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

如何使用Cython从Python dict初始化结构?

fab*_*ioM 7

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