CF84 - 1 year ago 152
Python Question

# Python: how to slice a dictionary based on the values of its keys?

Say I have a dictionary built like this:

`d={0:1, 1:2, 2:3, 10:4, 11:5, 12:6, 100:7, 101:8, 102:9, 200:10, 201:11, 202:12}`

and I want to create a subdictionary
`d1`
by slicing
`d`
in such a way that
`d1`
contains the following keys:
`0, 1, 2, 100, 101, 102`
. The final output should be:

`d1={0:1, 1:2, 2:3, 100:7, 101:8, 102:9}`

Is there an efficient Pythonic way of doing this, given that my real dictionary contains over 2,000,000 items?

I think this question applies to all cases where keys are integers, when the slicing needs to follow certain inequality rules, and when the final result needs to be a bunch of slices put together in the same dictionary.

You could use dictionary comprehension with:

``````d = {0:1, 1:2, 2:3, 10:4, 11:5, 12:6, 100:7, 101:8, 102:9, 200:10, 201:11, 202:12}
keys = (0, 1, 2, 100, 101, 102)
d1 = {k: d[k] for k in keys}
``````

In python 2.7 you can also compute keys with (in python 3.x replace `it.ifilter(...)` by `filter(...)`):

``````import itertools as it

d = {0:1, 1:2, 2:3, 10:4, 11:5, 12:6, 100:7, 101:8, 102:9, 200:10, 201:11, 202:12}
d1 = {k: d[k] for k in it.ifilter(lambda x: 1 < x <= 11, d.keys())}
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download