提问人:user58925 提问时间:10/10/2023 最后编辑:user58925 更新时间:10/10/2023 访问量:62
C++ Cython 映射操作返回 {b'a': 2} 而不是 {'a': 2}
C++ Cython Map operations returns {b'a': 2} rather than {'a': 2}
问:
为什么以下代码打印 {b'a': 2} 而不是 {'a': 2}。 我该如何解决它:
文件1:parameters.pyx
# parameters.pyx
from libcpp.map cimport map
from libcpp.string cimport string
cdef class Parameters:
cdef map[string,int] data
cdef int myVal
def __init__(self):
self.data['a'] = 1
self.myVal = 0
cpdef void change_data(self, map[string,int] newdata):
self.data = newdata
cpdef map[string,int] print_data(self):
print(self.data)
cpdef void change_myVal(self):
self.myVal = 3
文件2
# model.pyx
#from parameters import Parameters
from parameters import Parameters
from libcpp.map cimport map
from libcpp.string cimport string
cpdef single_run():
parameters = Parameters()
cdef map[string,int] newMap
newMap['a'] = 2
parameters.change_data(newMap)
parameters.print_data()
parameters.change_myVal()
Setup.py 文件
#!/usr/bin/env python3
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize(["*.py","*.pyx"],
language="c++")
)
答:
1赞
Goku - stands with Palestine
10/10/2023
#1
您可以直接使用:
d = {b'a': 2}
因为 是一个字节对象。b'a'
如果要将其转换为字符串,可以在 byte 对象上使用:decode("utf-8")
d = {k.decode("utf-8"):v for k,v in d.items()}
print(d)
#output
{'a': 2}
评论
b'a'
是一个字节字符串,以前是 Python 中的默认字符串类型。现在默认值为 unicode,仅显示为 .两者都可以在 python 中使用。一个只有标记。'a'
b