在以下示例中,我想通过调用类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
答案 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'}