I have a big dictionary object that has several key value pairs (about 16), but I am only interested in 3 of them. What is the best way (shortest/efficient/most elegant) to subset such dictionary?
The best I know is:
bigdict = {'a':1,'b':2,....,'z':26}
subdict = {'l':bigdict['l'], 'm':bigdict['m'], 'n':bigdict['n']}
I am sure there is a more elegant way than this.
You could try:
dict((k, bigdict[k]) for k in ('l', 'm', 'n'))
... or in Python versions 2.7 or later:
{k: bigdict[k] for k in ('l', 'm', 'n')}
I'm assuming that you know the keys are going to be in the dictionary. See the answer by Håvard S if you don't.
Alternatively, as timbo points out in the comments, if you want a key that's missing in bigdict
to map to None
, you can do:
{k: bigdict.get(k, None) for k in ('l', 'm', 'n')}
If you're using Python 3, and you only want keys in the new dict that actually exist in the original one, you can use the fact to view objects implement some set operations:
{k: bigdict[k] for k in bigdict.keys() & {'l', 'm', 'n'}}