I have a dictionary and want to remove certain values in `bad_list` from its value list, and return the remainder. Here is the code:

```
d = {1: ['a', 'c', 'd'], 2: ['b'], 5: ['e']}

bad_list = ['d','e']

ad = {k:d[k].remove(i) for k in d.keys() for sublist in d[k] for i in sublist if i in bad_list}

print 'd =', d

print 'ad =', ad

```

Unfortunately what that does is it changes the values in `d` permanently, and returns `None` for values in ad.

```
d =  {1: ['a', 'c'], 2: ['b'], 5: []}

ad =  {1: None, 5: None}

```

How can I get a dictionary that looks like this:

```
new_dict = {1: ['a','c'], 2:['b']}

```

without looping through? I have a much larger dictionary to deal with, and I'd like to do it in the most efficient way.