Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sorting decimals within a dictionary

I have almost finished my sorting problem, with many hours surfing the web I stumbled upon an extremely helpful guide to sorting dictionaries within Python, but a problem that seems to be reoccurring whenever I try to sort is the fact that my data that requires sorting is a float data type.

Example of how I create 'names'x'' and 'avmph'x'' variables

file1=open("1.txt",'r')
line1=file1.readlines()
names1=line1[0].rstrip('\n')
avmph1=line1[3].rstrip('\n')

mydict={names1:avmph1,
    names2:avmph2,
    names3:avmph3,
    names4:avmph4,
    names5:avmph5,
    names6:avmph6,
    names7:avmph7,
    names8:avmph8,
    names9:avmph9,
    names10:avmph10}

for key, value in sorted(mydict.items(),key=lambda item:(item[1],item[0])):
    print ("%s : %s" % (key,value))

The result I get is as follows:

1987dodd : 10
3219guy : 11.6
2198adams : 12.2
8765james : 13.2
4321jones : 6.3
5432kane : 6.3
9876smith : 6.5
8754smith : 8.7
7654max : 9
6543dunne : 9.5
#seems to sort values that are greater than 10 (2 digits before decimal) separately 

I am unsure of how to edit my exsisting code as .sort(float) worked on my 'avmph' alone, this method should allow me to return both 'names' and 'avmph'. Any help would be much obliged.

like image 225
ryan2405 Avatar asked Jul 12 '26 15:07

ryan2405


1 Answers

You need to cast to float:

(float(item[1]),item[0]))

You are sorting the strings not the actual float value:

In [1]: "13.2" < "6.3"
Out[1]: True

In [2]: float("13.2") < float("6.3")
Out[2]: False

Because ord("6") > ord("1") "6.3" is considered > "13.2".

Not totally sure how the name and avmph line up but you if they are on every second line you can do something like:

with open("1.txt") as f:
    d = {next(f).rstrip():next(f).rstrip() for line in f}

next(f).rstrip() advances to the next line each call so we ass every second line as key and value. with will automatically close your file.

like image 199
Padraic Cunningham Avatar answered Jul 14 '26 03:07

Padraic Cunningham



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!