Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: Python's collections.defaultdict(list) in Haskell? (Sylvain Henry) 2. Re: Python's collections.defaultdict(list) in Haskell? (Sylvain Henry) ---------------------------------------------------------------------- Message: 1 Date: Tue, 10 Nov 2015 14:24:35 +0100 From: Sylvain Henry <hsy...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Python's collections.defaultdict(list) in Haskell? Message-ID: <capmptcuhzsxdfohe4soo5npxuosztfwpzfan4+0jgu9u1s1...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" You can use insertWith: http://hackage.haskell.org/package/containers-0.5.6.3/docs/Data-Map-Strict.html#g:6 E.g.: let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"])] let m = Map.fromList xs Map.insertWith (++) "Item0" ["d"] m "d" is cons'ed from the left, so it shouldn't be too slow. I don't know why insertWith has this type instead of: Ord k => (b -> a -> a) -> k -> b -> Map k a -> Map k a which would allow you to write Map.insertWith (:) "Item0" "d" m Maybe you should report it. -- Sylvain 2015-11-10 6:23 GMT+01:00 Dan Stromberg <strom...@gmail.com>: > > These are some good leads. > > I'll be adding values one at a time, and yes, my keys aren't necessarily > unique. > > Is there a way of cons'ing on the single values one at a time, that will > avoid the slowness of ++ ? > > Thanks. > > On Mon, Nov 9, 2015 at 7:45 PM, Sylvain Henry <hsy...@gmail.com> wrote: > >> import qualified Data.Map as Map >> >> -- if your keys are unique >> let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"]), ("Item2", >> ["abc","def"])] >> Map.fromList xs >> >> -- if you want to combine values for keys that are equal >> let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"]), ("Item0", >> ["abc","def"])] >> Map.fromListWith (++) xs >> >> -- >> Sylvain >> >> >> 2015-11-10 3:07 GMT+01:00 Dan Stromberg <strom...@gmail.com>: >> >>> >>> I'm spending a little time here and there to learn some Haskell. I'm >>> coming from a chiefly Python/C/bash background. >>> >>> I want to build a Data.Map where the keys are strings, and the values >>> are lists of strings. >>> >>> In Python, collections.defaultdict(list) makes this pretty >>> straightforward. It gives a hash table ("dict") that has values that >>> default to an empty list, since list() produces an empty list. More info >>> here: >>> https://docs.python.org/3/library/collections.html#collections.defaultdict >>> >>> Is there an equivalent in Haskell? >>> >>> Thanks! >>> >>> -- >>> Dan Stromberg >>> >>> _______________________________________________ >>> Beginners mailing list >>> Beginners@haskell.org >>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners >>> >>> >> >> _______________________________________________ >> Beginners mailing list >> Beginners@haskell.org >> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners >> >> > > > -- > Dan Stromberg > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20151110/52eddb42/attachment-0001.html> ------------------------------ Message: 2 Date: Tue, 10 Nov 2015 14:30:15 +0100 From: Sylvain Henry <hsy...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Python's collections.defaultdict(list) in Haskell? Message-ID: <CAPmptcWMjWXBto3h3_gNtC=iagcp08ekastfmdulrp1p9ha...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" Oh forget the last part of my email: if the key doesn't exist, insertWith has to insert the new value, hence its type... -- Sylvain 2015-11-10 14:24 GMT+01:00 Sylvain Henry <hsy...@gmail.com>: > You can use insertWith: > http://hackage.haskell.org/package/containers-0.5.6.3/docs/Data-Map-Strict.html#g:6 > > E.g.: > let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"])] > let m = Map.fromList xs > Map.insertWith (++) "Item0" ["d"] m > > "d" is cons'ed from the left, so it shouldn't be too slow. I don't know > why insertWith has this type instead of: > Ord k => (b -> a -> a) -> k -> b -> Map k a -> Map k a > which would allow you to write Map.insertWith (:) "Item0" "d" m > > Maybe you should report it. > > -- > Sylvain > > 2015-11-10 6:23 GMT+01:00 Dan Stromberg <strom...@gmail.com>: > >> >> These are some good leads. >> >> I'll be adding values one at a time, and yes, my keys aren't necessarily >> unique. >> >> Is there a way of cons'ing on the single values one at a time, that will >> avoid the slowness of ++ ? >> >> Thanks. >> >> On Mon, Nov 9, 2015 at 7:45 PM, Sylvain Henry <hsy...@gmail.com> wrote: >> >>> import qualified Data.Map as Map >>> >>> -- if your keys are unique >>> let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"]), ("Item2", >>> ["abc","def"])] >>> Map.fromList xs >>> >>> -- if you want to combine values for keys that are equal >>> let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"]), ("Item0", >>> ["abc","def"])] >>> Map.fromListWith (++) xs >>> >>> -- >>> Sylvain >>> >>> >>> 2015-11-10 3:07 GMT+01:00 Dan Stromberg <strom...@gmail.com>: >>> >>>> >>>> I'm spending a little time here and there to learn some Haskell. I'm >>>> coming from a chiefly Python/C/bash background. >>>> >>>> I want to build a Data.Map where the keys are strings, and the values >>>> are lists of strings. >>>> >>>> In Python, collections.defaultdict(list) makes this pretty >>>> straightforward. It gives a hash table ("dict") that has values that >>>> default to an empty list, since list() produces an empty list. More info >>>> here: >>>> https://docs.python.org/3/library/collections.html#collections.defaultdict >>>> >>>> Is there an equivalent in Haskell? >>>> >>>> Thanks! >>>> >>>> -- >>>> Dan Stromberg >>>> >>>> _______________________________________________ >>>> Beginners mailing list >>>> Beginners@haskell.org >>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners >>>> >>>> >>> >>> _______________________________________________ >>> Beginners mailing list >>> Beginners@haskell.org >>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners >>> >>> >> >> >> -- >> Dan Stromberg >> >> _______________________________________________ >> Beginners mailing list >> Beginners@haskell.org >> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20151110/a73ce130/attachment-0001.html> ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 89, Issue 15 *****************************************