TP wrote: > Hi, > > Is the following code pythonic: > >>>> l=[{"title":"to", "value":2},{"title":"ti","value":"coucou"}] >>>> dict = [ dict for dict in l if dict['title']=='ti'] >>>> l.remove(*dict) >>>> l > [{'title': 'to', 'value': 2}] > > Precision: I have stored data in the list of dictionaries l, because in my > application I am sure that "title" is unique for each record. But perhaps > it is better to imagine that someday it will not be anymore the case? And > rather use a data storage as the following? > > l = { '001':{"title":"to", "value":2}, '002' > {"title":"ti","value":"coucou"}} > > The problem with this storage is that it implies to manipulate some "ids" > that have not any meaning for a humain being (001, 002, etc). > > Thanks a lot for you opinion,
If you can change the rest of your program to work smoothly with a dictionary I would suggest the following: >>> items = [{"title":"to", "value":2},{"title":"ti","value":"coucou"}] >>> lookup = dict((item["title"], item) for item in items) >>> lookup {'to': {'value': 2, 'title': 'to'}, 'ti': {'value': 'coucou', 'title': 'ti'}} >>> del lookup["ti"] >>> lookup {'to': {'value': 2, 'title': 'to'}} If you later have to accomodate for multiple dictionaries with the same title use lists of dictionaries as values: >> from collections import defaultdict >>> lookup = defaultdict(list) >>> for item in items: ... lookup[item["title"]].append(item) ... >>> lookup defaultdict(<type 'list'>, {'to': [{'value': 2, 'title': 'to'}], 'ti': [{'value': 'coucou', 'title': 'ti'}]}) >>> del lookup["ti"] >>> lookup defaultdict(<type 'list'>, {'to': [{'value': 2, 'title': 'to'}]}) Peter -- http://mail.python.org/mailman/listinfo/python-list