On 8 Sep 2005 16:03:12 -0700, [EMAIL PROTECTED] wrote: >Let's say I define a list of pairs as follows: >>>l = [('d', 3), ('a', 2), ('b', 1)] > >Can anyone explain why this does not work? >>>h = {}.update(l) > >and instead I have to go: >>>h = {} >>>h.update(l) >to initialize a dictionary with the given list of pairs? > >when an analagous operation on strings works fine: >>>s = "".join(["d","o","g"]) > >Seems inconsistent. > Join isn't that good an analogy, because the inputs and outputs are immutable. list.sort is more comparable to dict.update. There is now a builtin sorted function that will take a list and return a sorted one. Perhaps there will come an "updated" function analogously for dictionaries, but I don't think the use is that common, and you can make your own. Several ways. If you want to start with an empty dict anyway, the dict constructor will accept a sequence of pairs (so long as the first of every pair is hashable, which is also required for update). E.g.,
>>> dict([('d', 3), ('a', 2), ('b', 1)]) {'a': 2, 'b': 1, 'd': 3} or the sequence of pairs as a tuple expression >>> dict((('d', 3), ('a', 2), ('b', 1))) {'a': 2, 'b': 1, 'd': 3} or sometimes it's handy to start with the keys and values as separate sequences and zip them together for the dict constructor >>> dict(zip('dab', [3,2,1])) {'a': 2, 'b': 1, 'd': 3} or a generator expression >>> dict((k,3-i) for i,k in enumerate('dab')) {'a': 2, 'b': 1, 'd': 3} though note that dict wants the sequence as a single argument: >>> dict( ('d', 3), ('a', 2), ('b', 1) ) Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: dict expected at most 1 arguments, got 3 >>> def updated(d, seq): d=d.copy(); d.update(seq); return d ... >>> updated({}, [('d', 3), ('a', 2), ('b', 1)]) {'a': 2, 'b': 1, 'd': 3} One rationale for not returning a reference to the mutated value from a mutating method is that it is too easy to think of it as a pure expression, and forget the persistent side effect of mutating the object. I think that was thought too bug-prone. Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list