Rob Rob - 4 months ago 7
Python Question

iterate over only two keys of python dictionary

What is the pythonic way to iterate over a dictionary with a setup like this:

dict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': 6}


if I only wanted to iterate a for loop over all the values in
a
and
b
and skip
c
. There's obviously a million ways to solve this but I'd prefer to avoid something like:

for each in dict['a']:
# do something
pass
for each in dict['b']:
# do something
pass


of something destructive like:

del dict['c']
for k,v in dict.iteritems():
pass

Answer

The more generic way is using filter-like approaches by putting an if in the end of a generator expression.

If you want to iterate over every iterable value, filter with hasattr:

for key in (k for k in dict if hasattr(dict[k], '__iter__')):
    for item in dict[key]:
        print(item)

If you want to exclude some keys, use a "not in" filter:

invalid = set(['c', 'd'])
for key in (k for k in dict if key not in invalid):
    ....

If you want to select only specific keys, use a "in" filter:

valid = set(['a', 'b'])
for key in (k for k in dict if key in valid):
    ....