Syntax for extracting multiple items from a dictionary

Roy Smith roy at panix.com
Tue Nov 30 15:11:46 CET 2004


In article <TuednaLvv_626THcRVn-hA at rcn.net>, "shark" <no at spam.none> 
wrote:

> row = {"fname" : "Frank", "lname" : "Jones", "city" : "Hoboken", "state" :
> "Alaska"}
> cols = ("city", "state")
> 
> Is there a best-practices way to ask for an object containing only the keys
> named in cols out of row? In other words, to get this:
> {"city" : "Hoboken", "state" : "Alaska"}
> 
> Thanks,
> 
> shark

Just out of curiosity, why would you want to do that?  Are you trying to 
save on memory to store a lot of these things?  If so, I suspect you'd 
do even better (a few bytes per object) to store tuples of just the 
values, i.e. ("Hoboken", "Alaska"), and unpack them as you need them.

But, to answer your question, I don't know of any standard way to do 
what you want.  It's easy enough to write (a production version would 
probably want to catch KeyError's inside the for loop):

def getDictionarySlice (row, cols):
   slice = {}
   for key in cols:
      slice[key] = row[key]
   return slice

This won't work, but it would be kind of cool if it did:

def getOmnicientDictionarySlice (row, cols):
   for key not in cols:
      del row[key]

Hmmm.  Maybe there's an April Fools PEP in there somewhere :-)  
Actually, you could do:

def deleteUnwantedKeysInPlace (row, cols):
   for key in row.keys():
      if key not in cols:
         del row[key]



More information about the Python-list mailing list