Retrieve an item from a dictionary using an arbitrary object as the key

A

abcd

Hi,
I have a class such as,

class Type:
def __init__(self, val):
self.val = val

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

So I have a dictionary which maps an instance of Type to an instance
of Person. Now I need to retrieve a particular Person given a Type
object. What method in Type do I need to implement to allow it to be
retrieved?

For example (this is just an example):

t = Type(19)
p = Person("bob", 99)

x = {t : p}

.....<later on in the code somewhere>....

def getPerson(val):
return x[Type(val)]

getPerson(19) ....should return me the Person with name "bob" and age
99. I am thinking there is some method that is used by the dictionary
to know if the key exists, just not sure which.

thanks
 
I

irstas

Hi,
I have a class such as,

class Type:
def __init__(self, val):
self.val = val

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

So I have a dictionary which maps an instance of Type to an instance
of Person. Now I need to retrieve a particular Person given a Type
object. What method in Type do I need to implement to allow it to be
retrieved?

For example (this is just an example):

t = Type(19)
p = Person("bob", 99)

x = {t : p}

....<later on in the code somewhere>....

def getPerson(val):
return x[Type(val)]

getPerson(19) ....should return me the Person with name "bob" and age
99. I am thinking there is some method that is used by the dictionary
to know if the key exists, just not sure which.

thanks

You'll need __eq__ for testing if two objects are equivalent, and
__hash__ for calculating object's hash value.

class Type:
def __init__(self, val):
self.val = val

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

def __hash__(self):
return hash(self.val)
 
A

abcd

You'll need __eq__ for testing if two objects are equivalent, and
__hash__ for calculating object's hash value.

class Type:
def __init__(self, val):
self.val = val

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

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

that's exactly what I needed, thanks.
 
B

Bruno Desthuilliers

abcd a écrit :
While we're at it, and unless you're stuck with an aging Python version,
make Type and Person new-style classes:

class Type(object):
that's exactly what I needed, thanks.

And to answer your original question, ie "I am thinking there is some
method that is used by the dictionary to know if the key exists, just
not sure which.", you can:

- test if a dict as a given key:

d = {"a" : 42, "b" : "foo"}
"a" in d
=> True
"x" in d:
=> False

- and/or use dict.get(key, default=None):

d.get("a")
=> 42
d.get("x")
=> None
d.get("x", "woops")
=> "woops"

HTH
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top