* Added dict_islice to support slicing while ignoring non-existing keys
in the source dict.
This commit is contained in:
20
sugar.py
20
sugar.py
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/ipython -pylab
|
#!/usr/bin/ipython -pylab
|
||||||
#
|
#
|
||||||
# $Id: sugar.py,v 1.8 2010-10-25 14:42:50 wirawan Exp $
|
# $Id: sugar.py,v 1.9 2011-03-10 20:16:58 wirawan Exp $
|
||||||
#
|
#
|
||||||
# Created: 20100121
|
# Created: 20100121
|
||||||
# Wirawan Purwanto
|
# Wirawan Purwanto
|
||||||
@@ -45,14 +45,28 @@ else:
|
|||||||
#print dir(globals())
|
#print dir(globals())
|
||||||
|
|
||||||
def dict_slice(Dict, *keys):
|
def dict_slice(Dict, *keys):
|
||||||
"""Returns a shallow copy of the subset of a given dict (or an otherwise
|
"""Returns a shallow copy of the subset of a given dict (or a dict-like
|
||||||
hashable object) with a given set of keys.
|
object) with a given set of keys.
|
||||||
|
The return object is a dict.
|
||||||
|
No keys may be missing from Dict.
|
||||||
|
|
||||||
Example: if d = {'abc': 12, 'def': 7, 'ghi': 32, 'jkl': 98 }
|
Example: if d = {'abc': 12, 'def': 7, 'ghi': 32, 'jkl': 98 }
|
||||||
then dict_slice(d, 'abc', 'ghi') will yield {'abc': 12, 'ghi': 32 }
|
then dict_slice(d, 'abc', 'ghi') will yield {'abc': 12, 'ghi': 32 }
|
||||||
"""
|
"""
|
||||||
return dict([ (k, Dict[k]) for k in keys ])
|
return dict([ (k, Dict[k]) for k in keys ])
|
||||||
|
|
||||||
|
def dict_islice(Dict, *keys):
|
||||||
|
"""Returns a shallow copy of the subset of a given dict (or an otherwise
|
||||||
|
hashable object) with a given set of keys.
|
||||||
|
The return object is a dict.
|
||||||
|
This is similar to dict_slice, except that missing keys in
|
||||||
|
Dict will be ignored.
|
||||||
|
"""
|
||||||
|
# This is fancy but we require Dict to have keys() function:
|
||||||
|
#return dict([ (k, Dict[k]) for k in (set(keys) & set(Dict.keys())) ])
|
||||||
|
# use this one instead, which is milder requirement:
|
||||||
|
return dict([ (k, Dict[k]) for k in keys if (k in Dict) ])
|
||||||
|
|
||||||
def dict_join(*dicts):
|
def dict_join(*dicts):
|
||||||
"""Join multiple dicts into one, updating duplicate keys from left-to-right
|
"""Join multiple dicts into one, updating duplicate keys from left-to-right
|
||||||
manner.
|
manner.
|
||||||
|
|||||||
Reference in New Issue
Block a user