在字典中为每个值提供两个键

时间:2015-10-02 19:45:55

标签: python dictionary

我有City

class City(object):

  def __init__(self, name):
     self.name = name

然后我把它放入字典:

c = City('NYC')
cities = dict()
cities[c] = 1

我可以使用cities[c]访问NYC的值。我可以对cities['NYC']做同样的事吗?基本上,我希望City实例和City.name实例变量引用相同的密钥。

我想过单独的字典names = {'NYC': c},所以我可以cities[names['NYC']]。还有更好的方法吗?理想情况下,我不需要使用单独的变量,只需要修改City类或cities字典的内部。

1 个答案:

答案 0 :(得分:3)

您可以实现具有name属性的__hash__方法和基于name属性进行相等性比较的__eq__

class City(object):
    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        return self.name == other

    def __hash__(self):
        return hash(self.name)

输出:

In [8]: c = City('NYC')

In [9]: cities = dict()

In [10]: cities[c] = 1

In [11]: cities[c]
Out[11]: 1

In [12]: cities[c.name]
Out[12]: 1

实例哈希值基于其name属性,因此使用该对象或具有instance.name的属性的查找将散列为相同的值。