Я пытаюсь построить карту с целочисленными значениями в качестве ключей и списками целых чисел в качестве значений. Я написал следующий файл test.pyx:
from libcpp.map cimport map as cmap
import array
from libcpp.pair cimport pair as cpair
from cpython cimport array
cdef cmap[int, int[:]] dict_to_cmap(dict the_dict):
cdef int map_key
cdef int[:] map_val
cdef cpair[int, int[:]] map_element
cdef cmap[int, int[:]] my_map
for key,val in the_dict.items():
map_key = key
map_val = array.array('i', val)
map_element = (map_key, map_val)
my_map.insert(map_element)
print("values are:")
print(my_map[1], my_map[1][0])
print(my_map[2], my_map[2][0])
return my_map
def test():
the_dict = {1:[1], 2:[1]}
dict_to_cmap(the_dict)
Когда я компилирую этот код с:
python test_setup.py build_ext --inplace
И запускаю его с:
python -c "import test; test.test()"
Результат:
values are:
(<MemoryView of 'NoneType' at 0x7f018b837be0>, -1954556344)
(<MemoryView of 'NoneType' at 0x7f018b837d88>, 1)
Как видите, один из результатов поврежден. Что я делаю неправильно? Похоже, это как-то связано с int[:]
.