我有一个数据结构,由列表,整数和字符串组成,并且是嵌套的。例如:
[ "data", [ 1, "file", [], [1,2] ], 3 ]
我想使用这样的对象索引dict
,但我不能因为python抱怨它们不是不可变的(这是真的)。我很惊讶地发现,它似乎并不是一种通用的递归方法,而且它是不可变的。功能。这样的功能存在吗?有没有理由不这样做?我应该如何解决这个问题呢?
答案 0 :(得分:1)
这是一个非常不寻常和笨拙的数据结构,想要用作字典键,让我想知道这是否是XY problem。
将观察结果留给一方......对于您指定的特定类型的结构,只包含列表(可变)和字符串以及整数(不可变),将所有列表转换为元组的递归函数非常简单:< / p>
def tuplify(value):
if isinstance(value, list):
return tuple(tuplify(x) for x in value)
else:
return value
......并按预期工作:
>>> tuplify(['data', [1, 'file', [], [1, 2]], 3])
('data', (1, 'file', (), (1, 2)), 3)
但是,没有办法冻结任意可变对象。几年前,提出并拒绝了freeze protocol的Python,但即使它被接受,你也不得不依赖于每个可变对象,你可能会遇到实现__freeze__()
方法的问题。它起作用。