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.
--
https://mail.python.org/mailman/listinfo/python-list