filter()ing a dict
John Hunter
jdhunter at ace.bsd.uchicago.edu
Thu Aug 7 11:41:05 EDT 2003
>>>>> "Robin" == Robin Cull <robin.cull at pace.co.uk> writes:
Robin> My question is, does anybody else think that when calling
Robin> filter(f, dict), it should return a dict of the keys and
Robin> values of the former dict where the values satisfy the
Robin> conditions defined by f()?
The problem is not with filter. When you do
d = {'k1':1, 'k2':2}
for x in d: print x
It prints the keys. That is: by default, iterating over a dictionary
iterates over the keys. So when you filter a dict, it iterates over
the dictionary which means iterating over the keys. SO filter and
dict are behaving as advertised. As you noted, you can call
dictionary functions to iterate over the keys, values, or key, value
pairs.
It is easy to do what you want with list comprehensions
myDict = {"key 1": ["value 1", "value 2", "value 3", "value 4"],
"key 2": ["value 1", "value 2"],
"key 3": ["value2", "value 3", "value 4"],
"key 4": ["value 1", "value 2", "value 3", "value 4"]}
len4Dict = dict([ (k,v) for k,v in myDict.items() if len(v)==4])
print len4Dict
Cheers,
John Hunter
More information about the Python-list
mailing list