1
考慮性能,我寫了一個函數在cython中conert line into dict。 線好像我的cython(pyx)代碼轉換爲字典的問題是什麼?
" a: 1 b:2 sdf:3.0 \t ggg:vv"
結果字典應該是
{'a': '1', 'b': '2', 'sdf': '3.0', 'ggg': 'vv'}
的用Cython代碼:
from libc.string cimport strsep, strlen, strdup
def line2dict(line):
cdef char* line_str = strdup(line)
cdef char* item_delim = " \t"
cdef char* kv_delim = ":"
cdef char* kv_str
cdef char* k_str
ret = {}
while 1:
kv_str = strsep(&line_str, item_delim)
if kv_str == NULL:
break
if strlen(kv_str) == 0:
continue
k_str = strsep(&kv_str, kv_delim)
ret[k_str] = kv_str
return ret
上面的代碼可以被編譯成。所以,導入並在常規Python代碼中調用,但可能會導致「Segm在後面的代碼中引入錯誤「。
我是一個新手在cython。任何人都可以告訴我這段代碼有什麼問題嗎?
謝謝!
我想你不應該用C指針作爲鍵和值來構建Python字典。您可能需要將這些char *轉換爲python對象。看到這個鏈接:http://docs.cython.org/src/tutorial/strings.html – jcrudy