Python字典 - 一个值对应两个键

4

你好,我相信你不能做到这一点,但我想知道是否可以有一个字典,每个值都可以通过两个键访问,而无需复制字典。

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

1个回答

5

只需将同一(可变)对象放置在两个位置。如果更改该对象,则字典中的两个位置都会更改。唯一的缺点是您必须明确添加和删除两个位置(但您可以创建一些辅助方法)。

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]}

如果您想存储不可变类型,例如字符串和元组,则可能需要创建一个对象来存储它们,并在该对象内部更改。


1
所有对象仅存储一个引用。您可以执行 d = {1: (1, 2, 3)},然后 d[2] = d[1]。可变性无关紧要。 - agf
@agf,我稍微改了一下措辞,因为我看了你之前的评论。像那样存储元组的问题在于,你不能以一种会在两个位置上都改变它的方式来更改其中一个,对吧? - rplnt
1
你根本无法改变它,对吧。你可以做一些看起来像是在改变它的事情,这可能会让 OP 感到困惑,但这实际上与在 dict 中存储两次对象是否复制一个对象是不同的问题。 - agf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接