[BangPypers] list problem
Shashwat Anand
anand.shashwat at gmail.com
Thu Jul 22 19:23:55 CEST 2010
On Thu, Jul 22, 2010 at 10:37 PM, Shekhar Tiwatne <pythonic at gmail.com>wrote:
> On Thursday 22 July 2010 09:36 PM, Anand Balachandran Pillai wrote:
>
>> On Thu, Jul 22, 2010 at 7:00 PM, steve<steve at lonetwin.net> wrote:
>>
>>
>>
>>> Hi,
>>>
>>>
>>> On 07/22/2010 05:02 PM, Anand Balachandran Pillai wrote:
>>>
>>>
>>>
>>>> On Thu, Jul 22, 2010 at 3:21 PM, Vikram<kpguy at rediffmail.com> wrote:
>>>>
>>>> Suppose you have the following list:
>>>>
>>>>
>>>>> >>> x
>>>>> =[['cat',10],['cat',20],['cat',30],['dog',5],['dog',1],['dog',3]]
>>>>>
>>>>> My problem is that i wish to obtain the following two dictionaries:
>>>>> xdictstart = {'cat':10, 'dog':1}
>>>>> xdictend = {'cat':30, 'dog':5}
>>>>>
>>>>>
>>>>>
>>>>
>>>> Any nice way to do the above? Thanks.
>>>>
>>>>
>>>>>
>>>>> Yes. Try this.
>>>>>
>>>>>
>>>> x =[['cat',10],['cat',20],['cat',30],['dog',5],['dog',1],['dog',3]]
>>>>
>>>>
>>>>> x.sort()
>>>>>>> xdictstart = dict(reversed(x))
>>>>>>> xdictend = dict(x)
>>>>>>> xdictstart,xdictend
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> ({'dog': 1, 'cat': 10}, {'dog': 5, 'cat': 30})
>>>>>>
>>>>>>
>>>>>
>>>>
>>> Are you sure that'll work ? Is creating a dict from a sequence guaranteed
>>> to be executed serially withing the sequence ?
>>>
>>>
>>
>> Yes, it is. Since the list is sorted, the entries are entered into the
>> dictionary
>> serially (list is ordered), so hence in normal order we find the larger
>> value
>> overwrites the others and in reversed order, the smaller value.
>>
>> I cannot think of a solution which is shorter than this.
>>
>>
>
> Out of curiosity I tried benchmarking few of these solutions alongwith the
> one I wrote using itertools.groupby.
> My benchmarking did include large data sets and worst case.
> Results are the shortest solution (by Anand) was way faster than others.
> After that it was Steve's and mine and Navin was almost the same of the last
> spot.
>
> Which one is most readable? Well I leave that for now.
>
Anand's solution is the preferred one obviously. Readable and fast.
>
> Shekhar
>
> _______________________________________________
> BangPypers mailing list
> BangPypers at python.org
> http://mail.python.org/mailman/listinfo/bangpypers
>
--
~l0nwlf
More information about the BangPypers
mailing list