Hi,

I am not sure if this way is a good one, but it certainly is consise. Also sometimes, it's better to go for a simple approach than the consise one (for readability). With the abive disclaimer, I present my solution:

d1 = {1 : 2, 3 : 4, 5 : 6, 7 : 8, 9 : 10 }
s1 = [ 1, 5, 7 ]

# assuming you are using python 2.3.5
import sets
d2 = dict( [ ( x, d1[ x ] ) for x in sets.Set( d1.keys() ). intersection( sets.Set( s1 ) ) ] )



thanks, Satchit


Tim N. van der Leeuw wrote:

Hi,

I'd like to remove keys from a dictionary, which are not found in a
specific set. So it's kind of an intersection-operation.

I can create a new dictionary, or a loop over all keys and test them
for set-membership, but I was wondering if there was a smart way to
express this in 1 or 2 concise statements that I'm not aware of.

So are there smarter ways to get the intersection of dictionary and set
into a dictionary than the following pseudo-code:

# Variation 1
d2 = {}
for key in s: d2[key] = d1[key]

# Variation 2
for key in d.iterkeys(): if key not in s: del d[key]


And if there's no smarter way, then which of these two options would give best performance?

Cheers,

--Tim



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to