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
