擅长:python、mysql、java
<p>如果键和值不重叠,一个明显的方法是将它们简单地存储在同一个dict中</p>
<pre><code>class BidirectionalDict(dict):
def __setitem__(self, key, val):
dict.__setitem__(self, key, val)
dict.__setitem__(self, val, key)
def __delitem__(self, key):
dict.__delitem__(self, self[key])
dict.__delitem__(self, key)
d = BidirectionalDict()
d['foo'] = 4
print d[4] # Prints 'foo'
</code></pre>
<p>(您可能还希望实现像<code>__init__</code>、<code>update</code>和<code>iter*</code>方法这样的方法,使其像真正的dict一样工作,这取决于您需要多少功能)。</p>
<p>这应该只涉及一个查找,虽然可能不会在内存中节省很多(毕竟dict条目的数量还是原来的两倍)。但是请注意,无论是这个还是原来的都不会占用两倍的空间:dict只占用引用(实际上是指针)的空间,外加一个过度分配的开销。由于指向相同的对象,数据本身占用的空间不会重复两次。</p>