splitting one dictionary into two
Peter Abel
PeterAbel at gmx.net
Fri Apr 2 03:58:15 EST 2004
More information about the Python-list mailing list
Fri Apr 2 03:58:15 EST 2004
- Previous message (by thread): The joys of Python
- Next message (by thread): splitting one dictionary into two
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
jsaul <use_reply-to at empty.invalid> wrote in message news:<20040401153103.GC4577 at jsaul.de>... > Hello all, > > I have to split a dict into two dicts. Depending on their values, > the items shall remain in the original dict or be moved to another > one and at the same time be removed from the original dict. > > OK, this is how I do it right now: > > dict1 = { "a":1, "b":3, "c":5, "d":4, "e":2 } > dict2 = {} > klist = [] klist is not necessary because key in dict1 will give you the same but faster. > > for key in dict1: > if dict1[key] > 3: # some criterion > dict2[key] = dict1[key] > klist.append(key) > > for key in klist: > del dict1[key] > > print dict1 > print dict2 > > That means that I store the keys of the items to be removed from > the original dict in a list (klist) and subsequently remove the > items using these keys. > > Is there an "even more pythonic" way? > > Cheers, jsaul One solution could be: >>> dict1 = { "a":1, "b":3, "c":5, "d":4, "e":2 } # a little transfer-function, which deletes an item (k,v) in d and # returns (k,v) >>> transfer=lambda d,(k,v):[d.__delitem__(k)] and (k,v) # transfer the items from one dict into a list and make a dict # from it on the fly >>> dict2=dict([transfer(dict1,(k,v)) for (k,v) in dict1.items() if v>3]) >>> dict1 {'a': 1, 'b': 3, 'e': 2} >>> dict2 {'c': 5, 'd': 4} >>> Regards Peter
- Previous message (by thread): The joys of Python
- Next message (by thread): splitting one dictionary into two
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list