ski wrote:
hello,

i have this list which contains a number of dictionaries.

>>>d1 = [{'is_selected': False, 'id': 'AAC', 'title': 'Association of Airline Cons.'}, {'is_selected': False, 'id': 'AALA', 'title': 'Adv. Activity Licence. Auth.'}, {'is_selected': False, 'id': 'ABPCO', 'title': 'Association of British Prof. Conf. Organisation'}, {'is_selected': True, 'id': 'ABTA', 'title': 'Association of British Travel Agents'}, {'is_selected': False, 'id': 'ABTOT', 'title': 'Association of Bonded Travel Organisation Trust'}, {'is_selected': False, 'id': 'AERA', 'title': 'Association of Europe Rail Agents'}]

what would be the correct way to create a new list with the dictionaries but only for dictionaries with key

'is_selected': False

here is what I have tried, so far, perhaps there is a better and less error prone method:

 >>> d2 = []
 >>> for x in d1:
...     if False in x.values():
...             d2.append(x)

This code is wrong, x.values() gives a list of values in the dictionary x, and if 'False' is in it, you append the dict. You never check for the key.

Thus

d1 = [ {'id':False} ]

would also be copied.


Also, if you have a dict, and you know which key to use, use that key!!
Key-lookup in a dict is very much faster than a linear search in a list like x.values().

You can do something like
[d for d in d1 if d['is_selected'] == False]
to get your dicts.

If 'is_selected' is not always present, it gets a bit more complicated, I'll leave that as an exercise for the interested reader :)


Sincerely,
Albert

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to