CKM
CKM

Reputation: 1971

Python sorting based on two fields of the file data

I tried to sort data given here using the method described in the accepted solution in the same question. Instead of list of sets, I made list of lists and tried sorting twice using sorted method. But it did not work. I want the same output as given in the link above. Here is my output:

[['k3', '9.2603346875', '0.4639390435'],
['K1', '4.1458078125', '0.5129700421'],
['k2', '9.5360690625', '0.5481493305'],
 ['k7', '9.8022878125', '0.562983695'],
 ['k2', '6.319044375', '0.6469451082'],
 ['k5', '7.2702040625', '0.6632701035'],
 ['K1', '8.6394253125', '0.6690271589'],
 ['K1', '8.025495625', '0.7561548244'],
 ['k8', '5.44912125', '0.8532092538'],
 ['k6', '7.73398625', '1.017231759'],
 ['K1', '6.66228125', '1.0444456163'],
 ['k4', '10.6868384375', '1.1287761798'],
 ['k9', '7.5859665625', '1.276779643'],
 ['K1', '6.48153375', '1.4176140292']]

and here is my code:

path = "C:\\Chandresh_WORK\\data\\"
inpfile = 'demo1.txt'
mylist=[]
from operator import itemgetter
with open(path+inpfile,'r') as fid:
    for line in fid:      
        myset = list(line.split())
        mylist.append(myset)

mylist
s=sorted(mylist,key=itemgetter(0))     
sorted(s,key=itemgetter(2))

Upvotes: 2

Views: 53

Answers (1)

Moses Koledoye
Moses Koledoye

Reputation: 78554

You'll need to cast your strings to a numeric type to avoid a lexicographical sort and then invert the order of the second sort criterion to make it descending:

s = sorted(mylist,key=lambda x: (x[0], -float(x[2]))) 
#                                      ^ invert sort order

[['K1', '6.48153375', '1.4176140292'],
 ['K1', '6.66228125', '1.0444456163'],
 ['K1', '8.025495625', '0.7561548244'],
 ['K1', '8.6394253125', '0.6690271589'],
 ['K1', '4.1458078125', '0.5129700421'],
 ['k2', '6.319044375', '0.6469451082'],
 ['k2', '9.5360690625', '0.5481493305'],
 ['k3', '9.2603346875', '0.4639390435'],
 ['k4', '10.6868384375', '1.1287761798'],
 ['k5', '7.2702040625', '0.6632701035'],
 ['k6', '7.73398625', '1.017231759'],
 ['k7', '9.8022878125', '0.562983695'],
 ['k8', '5.44912125', '0.8532092538'],
 ['k9', '7.5859665625', '1.276779643']]

Upvotes: 2

Related Questions