如何在Cython中使用字典初始化结构体

9

Assuming I have a struct defined as such:

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

我需要能够将一个dict转换为my_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)

我不知道字段名称的原因是因为代码是自动生成的,我不想使用丑陋的hack来处理这种情况。

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


必须按名称吗?您可以通过顺序来完成,并使用联合(带有已知长度的数组)吗? - user227667
1个回答

9
你需要手动设置结构的每个元素,没有捷径。 如果你的代码是自动生成的,那么也应该很容易自动生成一个内联函数, 将PyDict转换为你的每个结构体。

1
你能否举个例子详细说明一下? - MAS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接