Java singletonMap in Python

Duncan Booth duncan.booth at invalid.invalid
Mon Sep 24 13:33:29 EDT 2012


Steven D'Aprano <steve+comp.lang.python at pearwood.info> wrote:

> On Mon, 24 Sep 2012 00:14:23 +0100, Mark Lawrence wrote:
> 
>> Purely for fun I've been porting some code to Python and came across
>> the singletonMap[1].  I'm aware that there are loads of recipes on
>> the web for both singletons e.g.[2] and immutable dictionaries
>> e.g.[3].  I was wondering how to combine any of the recipes to
>> produce the best implementation, where to me best means cleanest and
>> hence most maintainable.  I then managed to muddy the waters for
>> myself by recalling the Alex Martelli Borg pattern[4].  Possibly or
>> even probably the latter is irrelevant, but I'm still curious to know
>> how you'd code this beast.
>> 
>> First prize for the best solution is a night out with me, no guesses
>> what the second prize is :)
>> 
>> [1]http://docs.oracle.com/javase/1.4.2/docs/api/java/util/
> Collections.html
> 
> Copied from that page:
> 
> "static Map     singletonMap(Object key, Object value) 
> Returns an immutable map, mapping only the specified key to the
> specified value."
> 
> I don't see the point of this. It takes a single key, with a single 
> value, and is immutable so you can't change it or add new keys. What's
> the point? Why bother storing the key:value pair in a data structure, 
> then look up the same data structure to get the same value every time?
> 
> # Pseudo-code
> d = singletonMap(key, calculate(key))
> # later:
> value = d[key]  # there's only one key this could be
> process(value)
> 
> 
> Why not just store the value, instead of key, value and mapping?
> 
> value = calculate(key)
> # later
> process(value)
> 
> 
> 
Google is your friend. Searching for "java singletonMap" gives this as
the second hit:

http://stackoverflow.com/questions/7125536/when-would-i-use-java-collections-singletonmap-method

The answers seem to be that it's for all those cases in Java where you have a 
method that takes a map as an argument and you want to pass in a map with a single
kep/value pair. In that case it lets you replace 3 lines of Java with 1.

e.g. from the comments:
"If you have a simple select statement like "select foo from bar where id = :barId" 
then you would need a parameter map with a single key-value pair, barId=123. 
That's a great place to use singletonMap()"

Of course in Python you just use a dict literal in that case so it's pointless.

-- 
Duncan Booth http://kupuguy.blogspot.com



More information about the Python-list mailing list