我有一个用例,其中包含密钥和数据的东西。 我想对这些数据和数据的dict索引进行有效编码。 所以Thing是一个类,而dictionary是其实例的dict索引:
d = {}
class Thing:
def __init__(k,v): self.key=k; self.data=v; d[v]=self
现在我想在我的代码中将Thing对象传递给一个对象,如下所示:
thing1, thing2 = d['thing1'], d['thing2']
此解决方案有效。我可以按键索引,我可以从每个东西中检索一个键,但请注意这个解决方案冗余地存储指向键的指针,包括dict和Thing对象。
我可以实施' dict'从头开始,我可以告诉它如何从值访问密钥。因此,许多哈希方法可以避免存储指向密钥的第二个指针。
任何Python dict实现都能提供这种灵活性吗? 如果你能够断言这是不可能的,我很乐意听到它。 THX。
注意:这里重要的一点是,以后我希望将键和数据都作为单个对象处理,并指向它的单个指针,我不想堆分配一个元组来实现这一点,因为这会打败我的原来的目标。
答案 0 :(得分:0)
将密钥存储在值中是很奇怪的,因为您必须拥有密钥才能获取值。
如果您不想存储它,可以使用特殊的getter函数来获取它:
def get_key_and_value(d, k):
return (k, d[k])
obj = get_key_and_value(d, k)
print "my key is %s and value is %s" % (obj[0], obj[1])
答案 1 :(得分:0)
您还没有充分解释用例,因此我的指导不会非常准确。我假设您不想将密钥存储在值中以节省内存(正如您在示例中所示 - 然后被拒绝)?此外,您将需要一些操作来访问用于访问该值的值和密钥。
您认为价值检索功能将以某种方式访问原始密钥哈希,并且从那里可以以某种方式检索密钥是不正确的。 Python字典不会显示此信息。我相信你可以滚动你自己的python扩展来创建这个能力,但这听起来像很多工作(再次 - 没有理解用例,我无法准确地确定工作是否“值得”)
相反,为什么不创建自己的dict
类并将代码添加到自定义方法中。像这样:
class MyDict(object):
def __init__(self):
self.d = dict()
def add(self, k, v):
self.d[k] = v
def later(self, k):
print("my key is %s and value is %s" % (k, self.d[k]))
如果这不是您所希望的 - 您能更详细地描述用例吗?