using setDefault
gzeljko
gzeljko at sezampro.yu
Tue Aug 14 10:25:01 EDT 2001
From: Mark Robinson <m.1.robinson at herts.ac.uk>
> I am updating some of my older code to use the setdefault dictionary
> method. Where I had code saying:
>
> if dict.has_key(x):
> dict[x].append(y)
> else:
> dict[x] = [y]
>
> now I smile and say:
>
> dict.setdefault(x, []).append(y)
>
>
> very nice. I am wondering if this approach can be adapted to a situation
> where you are merging two dictionaries. So currently I have a situation
> where for example:
>
> for x in a.keys():
> if b.has_key(x):
> for item in a[x]:
> try:
> b[x].index(item)
> except ValueError:
> b[x].append(item)
> else:
> b[x] = a[x]
>
>
> I can't see how that can be rewritten, but I have a feeling there is
> prossibly a better way
>
I'd write that:
for x in a.keys():
item = b.setdefault(x,[])
item += [y for y in a[x] if y not in item]
Difference from orginal:
copying from a when not b.has_key(x)
missing check for uniquenes in a[x]
not-fastest-not-shortest-ly-y'rs,
gzeljko
More information about the Python-list
mailing list