chenyong20...@gmail.com wrote: > 在 2016年10月19日星期三 UTC+8上午11:46:28,MRAB写道: >> On 2016-10-19 03:15, chenyong20...@gmail.com wrote: >> > Thanks Peter and Anssi for your kind help. Now I'm ok with the first >> > question. But the second question still confused me. Why "it seems that >> > after root = root.setdefault(ch,{}) tree['a'] and root are the same >> > object" and follows tree['a']['b']? Thanks. >> > >> You call the .setdefault method with a key and a default value. >> >> The .setdefault method does this: if the key is in the dict, it returns >> the associated value, else it puts the key and the default into the dict >> and then returns the default. > > thanks for the reply. I understand this. I'm now confused on why tree got > its magic result.
Perhaps it is easier to understand if you rewrite the function without setdefault()? def add_to_tree(root, value_string): print "root is %s, value_string is %s" % (root, value_string) for ch in value_string: print "ch is %s" % ch if ch not in root: # always true if the root arg is an empty dict root[ch] = {} root = root[ch] # inside the function the inner dict becomes the new # root print "root is", root print "tree is", tree -- https://mail.python.org/mailman/listinfo/python-list