from collections import namedtuple Human = namedtuple('Human', 'id name friends appearsIn homePlanet') luke = Human( id='1000', name='Luke Skywalker', friends=[ '1002', '1003', '2000', '2001' ], appearsIn=[ 4, 5, 6 ], homePlanet='Tatooine', ) vader = Human( id='1001', name='Darth Vader', friends=[ '1004' ], appearsIn=[ 4, 5, 6 ], homePlanet='Tatooine', ) han = Human( id='1002', name='Han Solo', friends=[ '1000', '1003', '2001' ], appearsIn=[ 4, 5, 6 ], homePlanet=None, ) leia = Human( id='1003', name='Leia Organa', friends=[ '1000', '1002', '2000', '2001' ], appearsIn=[ 4, 5, 6 ], homePlanet='Alderaan', ) tarkin = Human( id='1004', name='Wilhuff Tarkin', friends=[ '1001' ], appearsIn=[ 4 ], homePlanet=None, ) humanData = { '1000': luke, '1001': vader, '1002': han, '1003': leia, '1004': tarkin, } Droid = namedtuple('Droid', 'id name friends appearsIn primaryFunction') threepio = Droid( id='2000', name='C-3PO', friends=[ '1000', '1002', '1003', '2001' ], appearsIn=[ 4, 5, 6 ], primaryFunction='Protocol', ) artoo = Droid( id='2001', name='R2-D2', friends=[ '1000', '1002', '1003' ], appearsIn=[ 4, 5, 6 ], primaryFunction='Astromech', ) droidData = { '2000': threepio, '2001': artoo, } def getCharacter(id): return humanData.get(id) or droidData.get(id) def getFriends(character): return map(getCharacter, character.friends) def getHero(episode): if episode == 5: return luke return artoo def getHuman(id): return humanData.get(id) def getDroid(id): return droidData.get(id)