invert dictionary with list &c
Des Small
des.small at bristol.ac.uk
Thu Nov 27 06:15:49 EST 2003
John Hunter <jdhunter at ace.bsd.uchicago.edu> writes:
> >>>>> "Des" == Des Small <des.small at bristol.ac.uk> writes:
>
> def count(l):
> d = {}
> [d.setdefault(w, 0) += 1 for w in l]
> return d
>
> This code raises a SyntaxError.
So it does. Whatever it was I had working yesterday wasn't that,
then.
> The standard idiom for counting all the elements in a list with a
> dictionary is
>
> def count(l):
> d = {}
> for w in l: d[w] = d.get(w,0) + 1
> return d
>
> I think the basic rule of thumb is to use the setdefault approach for
> mutable objects (list, dict) and the get approach for immutable
> elements (strings, ints, floats, tuples).
What I really want is a generic pattern that constructs dictionary
from iterators in a clean way, while allowing mutation of the
dictionary entry as necessary.
> Also, many here would find using list comprehensions while ignoring
> their return value, as you did in '[d.setdefault(w, 0) += 1 for w in
> l]' to be an abuse of list comps. At least I've been admonished for
> doing so, and so I must now admonish you to continue the cycle of
> violence.
I shall be breaking the cycle by not caring, although if and when
generator comprehensions allow me to comply with your preferences I'll
probably do so.
[...]
Des
--
"[T]he structural trend in linguistics which took root with the
International Congresses of the twenties and early thirties [...] had
close and effective connections with phenomenology in its Husserlian
and Hegelian versions." -- Roman Jakobson
More information about the Python-list
mailing list