Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #106402

Re: Sorting a list

From DFS <nospam@dfs.com>
Newsgroups comp.lang.python
Subject Re: Sorting a list
Date 2016-04-03 16:08 -0400
Organization A noiseless patient Spider
Message-ID <ndrt29$36l$1@dont-email.me> (permalink)
References <ndrn97$bco$1@dont-email.me> <mailman.408.1459711883.28225.python-list@python.org>

Show all headers | View raw


On 4/3/2016 3:31 PM, Peter Otten wrote:
> DFS wrote:
>
>> cntText = 60
>> cntBool = 20
>> cntNbrs = 30
>> cntDate = 20
>> cntBins = 20
>>
>> strText = "  text:     "
>> strBool = "  boolean:  "
>> strNbrs = "  numeric:  "
>> strDate = "  date-time:"
>> strBins = "  binary:   "
>>
>> colCounts = [(cntText,strText) , (cntBool,strBool), (cntNbrs,strNbrs) ,
>> (cntDate,strDate) , (cntBins,strBins)]
>>
>> # sort by alpha, then by column type count descending
>> colCounts.sort(key=lambda x: x[1])
>> colCounts.sort(key=lambda x: x[0], reverse=True)
>> for key in colCounts: print key[1], key[0]]
>>
>> -------------------------------------------------
>>
>> Output (which is exactly what I want):
>>
>>     text:      60
>>     numeric:   30
>>     binary:    20
>>     boolean:   20
>>     date-time: 20
>>
>> -------------------------------------------------
>>
>>
>> But, is there a 1-line way to sort and print?
>
> Yes, but I would not recommend it. You can replace the sort() method
> invocations with nested calls of sorted() and instead of
>
> for item in items:
>      print convert_to_str(item)
>
> use
>
> print "\n".join(convert_to_str(item) for item in items)
>
> Putting it together:
>
>>>> from operator import itemgetter as get
>>>> print "\n".join("{1} {0}".format(*p) for p in sorted(
> ... sorted(colCounts, key=get(1)), key=get(0), reverse=True))

Kind of clunky looking.  Is that why don't you recommend it?




>    text:      60
>    numeric:   30
>    binary:    20
>    boolean:   20
>    date-time: 20
>
> You could also cheat and use
>
> lambda v: (-v[0], v[1])
>
> and a single sorted().

That works well.  Why is it 'cheating'?


Thanks for the reply.

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Sorting a list DFS <nospam@dfs.com> - 2016-04-03 14:30 -0400
  Re: Sorting a list DFS <nospam@dfs.com> - 2016-04-03 14:34 -0400
  Re: Sorting a list Peter Otten <__peter__@web.de> - 2016-04-03 21:31 +0200
    Re: Sorting a list DFS <nospam@dfs.com> - 2016-04-03 16:08 -0400
      Re: Sorting a list Peter Otten <__peter__@web.de> - 2016-04-04 08:56 +0200
      Re: Sorting a list Random832 <random832@fastmail.com> - 2016-04-04 09:40 -0400
      Re: Sorting a list Peter Otten <__peter__@web.de> - 2016-04-04 16:12 +0200

csiph-web