python - Try appending items to a default dictionary -


i have function:

#should named tryappendingtolistinadict i'm lazy long of name def tryappendingtodict(dictionary, key, item):     try:         #append existing list         dictionary[key].append(item)     except keyerror:         #list doesn't exist yet, make 1         dictionary[key] = [item] 

in cases use function on 1 dictionary, let's call defaultdictoflists, in code looks like

tryappendingtodict(defaultdictoflists, 'spam', 'eggs') tryappendingtodict(defaultdictoflists, 'spam', 'beacon') tryappendingtodict(defaultdictoflists, 'not spam', 'yuck!') #... tryappendingtodict(differentdict, 'spam', 'i don't spam!') 

so wanted try , make keyword argument function assume you're appending items defaultdictoflists. however, main problem here, function imported separate module (and should remain there), simple

def tryappendingtodict(key, item, dictionary = defaultdictoflists): 

raises nameerror, , globals()['defaultdictoflists'] raises keyerror.

is there way fix it? clarify code lot , speed coding process well.


edit

i'm not using defaultdict(list) because dictionary passed django template , don't handle defaultdicts reason. i'd have convert defaultdict regular dict, takes o(n) time, if recall correctly.

why don't monkeypatch it? can:

from module import tryappendingtodict _tryappendingtodict  def tryappendingtodict(key, item, dictionary=defaultdictoflists):     return _tryappendingtodict(dictionary, key, item) 

and use function in module defaultdictoflists defined.

moreover, can't see usefulness of code, sure can use defaultdict, can use dictionaries' setdefault method. reduce dictionary insertions 1 line, turning tryappendingtodict() useless:

>>>d={} >>>d.setdefault('key',['value']) >>>d {'key': ['value']} 

Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -