2011-09-27 75 views
4

嗨,我相当肯定你不能这样做,但我想知道如果你可以有一个字典,其中每个值可以通过两个键访问而不需要重复字典。蟒蛇字典 - 每个值的两个键

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

回答

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

如果你想存储unmutable类型,如字符串,元组,你可能需要创建对象,将它们存储并更改该对象内。

+1

所有对象只存储一个引用。你可以做'd = {1:(1,2,3)}'然后'd [2] = d [1]'。可变性是无关紧要的。 – agf

+0

@agf在我阅读了您以前的评论之后,更改了一些措辞。像这样存储的元组的东西是你不能在两个地方改变它,你能吗? – rplnt

+1

你根本无法改变它,正确。事实上,你可以做的事情看起来像改变它可能会混淆OP,这是真的,但这与你是否复制一个对象,当你在一个'dict'中存储它两次是不同的问题。 – agf