我需要一个树形(或者严格的,像STD::从C++中映射,这样我就可以插入一个键值对,并方便地访问下一个和以前的元素)数据结构来保存一些信息,但是自从标准以来 Python缺少这种结构,我决定使用SortedContainers库中的SortedDict
我需要SortedDict来保存某些元素的索引,这些元素按y坐标排序。
这很简单:
D = SortedDict()
D[y_coord_1] = element_1_index
D[y_coord_2] = element_2_index
...
然后,总体思路发生了一些变化,我还需要索引按其第二个坐标和类似布尔值(0或1)排序。它们都存储为一个元组。 例如,它的工作原理如下:
D[(y_c_1, x_c_1, 1)] = element_1_index
D[(y_c_2, x_c_2, 0)] = element_1_index
...
第三个元组元素是零还是一对问题本身没有影响
我注意到,这些元素并不像我所期望的那样由元组的第三个元素排序。 为了解决这个问题,我创建了sortedct()的子类:
class StateTree(SortedDict):
def _in_key(x : (), y : ()) -> bool:
if x[0] < y[0]: return 1
elif x[0] > y[0]: return -1
else:
if x[1] < y[1]: return 1
elif x[1] > y[1]: return -1
else:
if x[2]: return 1
else: return -1
return 0
def __init__(self, line_coefs, *args, **kwargs):
super().__init__(key=cmp_to_key(StateTree._in_key) , *args, **kwargs)
...
问题是,现在当我尝试在dict中插入一个元素时,出现以下错误:
TypeError: '<' not supported between instances of 'tuple' and 'str'
当然,我插入了一个数值元组,例如(10,4,0),我不知道为什么这个错误会不断出现。我想我可能用错了关键字段,但我不确定
此错误的原因是什么?如何正确设置此dict的键? 如果不可能,我可以使用其他什么数据结构?我需要把它整理好,我需要 O(logn)min、next、previous、find、remove和insert
目前没有回答
相关问题 更多 >
编程相关推荐