python字典-每个值有两个键

python字典-每个值有两个键,python,dictionary,Python,Dictionary,您好,我很确定您不能这样做,但我想知道您是否可以拥有一个字典,其中每个值都可以通过两个键访问,而无需复制字典 我想这样做的原因是,两个键将代表相同的东西,但其中一个将是缩短版本,例如“TYR”和“Y”将具有相同的值 只需将相同(可变)对象放在两个位置。如果更改对象,它将在字典中的两个位置都更改。唯一的缺点是您必须显式地添加和删除这两种方法(尽管您可以创建一些帮助器方法) 如果要存储字符串和元组等不可变类型,可能需要创建将存储在其中的对象,并在该对象内对其进行更改。所有对象仅存储引用。你可以做d=

您好,我很确定您不能这样做,但我想知道您是否可以拥有一个字典,其中每个值都可以通过两个键访问,而无需复制字典

我想这样做的原因是,两个键将代表相同的东西,但其中一个将是缩短版本,例如“TYR”和“Y”将具有相同的值

只需将相同(可变)对象放在两个位置。如果更改对象,它将在字典中的两个位置都更改。唯一的缺点是您必须显式地添加和删除这两种方法(尽管您可以创建一些帮助器方法)


如果要存储字符串和元组等不可变类型,可能需要创建将存储在其中的对象,并在该对象内对其进行更改。

所有对象仅存储引用。你可以做
d={1:(1,2,3)}
然后
d[2]=d[1]
。易变性是不相关的。@agf在我读到你之前的评论时稍微改变了措辞。元组是这样存储的,你不能改变一个元组,因为它在两个地方都会改变,是吗?你根本不能改变它,对吗。事实上,你可以做一些看起来像是改变它的事情,这可能会混淆OP,没错,但这与在
dict
中存储两次对象时是否复制它是一个不同的问题。
In [4]: d = {}
In [5]: c = [1,2]
In [7]: d[1] = c
In [8]: d[2] = c
In [9]: d
Out[9]: {1: [1, 2], 2: [1, 2]}
In [10]: c.append(3)
In [11]: d
Out[11]: {1: [1, 2, 3], 2: [1, 2, 3]}