Python:当键是一个对象时,如何将成员函数调用为dict的键?

时间:2013-11-29 23:27:51

标签: python class dictionary key

在以下示例中,我想通过调用类a1的{​​{1}}函数来更改d的{​​{1}}键。但我看不到如何访问set_x()中的密钥。

A

我想更改dict,以便#!/usr/bin/env python class A(object): def __init__(self, data=''): self.data = data self.x = '' def set_x(self, x): self.x = x def __repr__(self): return 'A(%s:%s)' % (self.data, self.x) def __eq__(self, another): return hasattr(another, 'data') and self.data == another.data def __hash__(self): return hash(self.data) a1 = A('foo') d = {a1: 'foo'} print d #{A(foo:): 'foo'} 打印为d。当然,以下不起作用。另外,我不想重新分配相同的值。有人知道通过调用密钥的成员函数来修改密钥的方法吗?感谢。

d

2 个答案:

答案 0 :(得分:1)

您需要引用对象本身,并在那里进行修改。

看看这个控制台会话:

>>> a = A("foo")
>>> d = {a:10}
>>> d
{A(foo:): 10}
>>> a.set_x('word')
>>> d
{A(foo:word): 10}

您还可以从dict.items()获取键值对:

a, v = d.items()[0]
a.set_x("word")

希望这有帮助!

答案 1 :(得分:0)

您可以保留对象的引用并进行修改。如果你不能保持对密钥对象的引用,你仍然可以使用for k, v in d.items():遍历dict,然后使用该值来知道你拥有哪个密钥(尽管这在如何使用dict和非常低效)

a1 = A('foo')
d = {a1: 'foo'}
print(d) # {A(foo:): 'foo'}
a1.set_x('hello')
print(d) # {A(foo:hello): 'foo'}