I have a dictionary with the following structure:
Key = A tuple containing two strings
Value = A tuple containing two float values
I want to sort this dictionary using both values.
The requirement is to pick the top 10 records with maximum values for both float fields
Is it possible to do so?
Please find below a sample of the data in dictionary:
{"(12144, 'DBI 3900288')(62232, 'DBI 9503371')": (0.2978723404255319, 56),
"(62232, 'DBI 9503371')(12144, 'DBI 3900288')": (0.45153846153846154, 56),
"(89121, 'USB 7812')(908121, 'USB 3182')": (0.45, 6),
"(908121, 'USB 3182')(20629, 'FORT 11156')": (0.8, 8),
"(908121, 'USB 3182')(20630, 'FORT 11158')": (0.9, 9),
"(908121, 'USB 3182')(20632, 'FORT 11164')": (0.45, 6),
"(908121, 'USB 3182')(20666, 'FORT 1234TOB')": (0.8, 8),
"(908121, 'USB 3182')(20667, 'FORT 1236TOB')": (0.45, 6),
"(908121, 'USB 3182')(20669, 'FORT 1240TOB')": (0.8, 8),
"(908121, 'USB 3182')(20674, 'FORT 1252TOB')": (0.8, 8),
"(908121, 'USB 3182')(20675, 'FORT 1258TOB')": (0.8, 8),
"(908121, 'USB 3182')(20684, 'FORT 13408A')": (0.7, 7),
"(908121, 'USB 3182')(20685, 'FORT 13410A')": (0.7, 7),
"(908121, 'USB 3182')(20686, 'FORT 13412A')": (0.45, 6),
"(908121, 'USB 3182')(20687, 'FORT 13415A')": (0.45, 6),
"(908121, 'USB 3182')(20688, 'FORT 13418A')": (0.45, 6),
"(908121, 'USB 3182')(20689, 'FORT 13424A')": (0.45, 6),
"(908121, 'USB 3182')(20711, 'FORT 16-630')": (0.8, 8),
"(908121, 'USB 3182')(20712, 'FORT 16-632')": (0.7, 7),
"(908121, 'USB 3182')(20713, 'FORT 16-634')": (0.45, 6),
"(908121, 'USB 3182')(20714, 'FORT 16-636')": (0.7, 7),
"(908121, 'USB 3182')(20716, 'FORT 16-640')": (0.8, 8),
"(908121, 'USB 3182')(20972, 'FORT 39002')": (0.9, 9),
"(908121, 'USB 3182')(20985, 'FORT 39652')": (0.8, 8),
"(908121, 'USB 3182')(20987, 'FORT 39658')": (0.7, 7),
"(908121, 'USB 3182')(20992, 'FORT 39670')": (0.7, 7),
"(908121, 'USB 3182')(20993, 'FORT 39672')": (0.45, 6),
"(908121, 'USB 3182')(20995, 'FORT 39676')": (0.7, 7),
"(908121, 'USB 3182')(20996, 'FORT 39682')": (0.7, 7),
"(908121, 'USB 3182')(20999, 'FORT 39688')": (0.45, 6) }
Expected Output:
{
"(908121, 'USB 3182')(20630, 'FORT 11158')": (0.9, 9),
"(908121, 'USB 3182')(20972, 'FORT 39002')": (0.9, 9),
"(908121, 'USB 3182')(20629, 'FORT 11156')": (0.8, 8),
"(908121, 'USB 3182')(20666, 'FORT 1234TOB')": (0.8, 8),
"(908121, 'USB 3182')(20669, 'FORT 1240TOB')": (0.8, 8),
"(908121, 'USB 3182')(20674, 'FORT 1252TOB')": (0.8, 8),
"(908121, 'USB 3182')(20675, 'FORT 1258TOB')": (0.8, 8),
"(908121, 'USB 3182')(20711, 'FORT 16-630')": (0.8, 8),
"(908121, 'USB 3182')(20716, 'FORT 16-640')": (0.8, 8),
"(908121, 'USB 3182')(20985, 'FORT 39652')": (0.8, 8),
"(908121, 'USB 3182')(20684, 'FORT 13408A')": (0.7, 7),
"(908121, 'USB 3182')(20685, 'FORT 13410A')": (0.7, 7),
"(908121, 'USB 3182')(20712, 'FORT 16-632')": (0.7, 7),
"(908121, 'USB 3182')(20714, 'FORT 16-636')": (0.7, 7),
"(908121, 'USB 3182')(20995, 'FORT 39676')": (0.7, 7),
"(908121, 'USB 3182')(20996, 'FORT 39682')": (0.7, 7),
"(908121, 'USB 3182')(20987, 'FORT 39658')": (0.7, 7),
"(908121, 'USB 3182')(20992, 'FORT 39670')": (0.7, 7),
"(62232, 'DBI 9503371')(12144, 'DBI 3900288')": (0.45153846153846154, 56),
"(908121, 'USB 3182')(20632, 'FORT 11164')": (0.45, 6),
"(89121, 'USB 7812')(908121, 'USB 3182')": (0.45, 6),
"(908121, 'USB 3182')(20667, 'FORT 1236TOB')": (0.45, 6),
"(908121, 'USB 3182')(20686, 'FORT 13412A')": (0.45, 6),
"(908121, 'USB 3182')(20687, 'FORT 13415A')": (0.45, 6),
"(908121, 'USB 3182')(20688, 'FORT 13418A')": (0.45, 6),
"(908121, 'USB 3182')(20689, 'FORT 13424A')": (0.45, 6),
"(908121, 'USB 3182')(20713, 'FORT 16-634')": (0.45, 6),
"(908121, 'USB 3182')(20999, 'FORT 39688')": (0.45, 6),
"(908121, 'USB 3182')(20993, 'FORT 39672')": (0.45, 6)
"(12144, 'DBI 3900288')(62232, 'DBI 9503371')": (0.2978723404255319, 56),
}
When the sorting method is used on the float values of the tuple. The sorting order is sometimes mixed up when the second float value in the tuple is double digit. For e.g. in the example shown below, sorting of 1st float is perfectly in desc order, however, the second float sorting is incorrect as 8 < 15
"(12423, 'LACT 1281')(14961, 'OSI 76214')": (0.8888888888888888, 8),
"(12423, 'LACT 1281')(15328, 'PER 58835')": (0.8888888888888888, 8),
"(12423, 'LACT 1281')(16902, 'RAP NRT16')": (0.8888888888888888, 8),
"(18154, 'TGIS 804176-01')(18139, 'TGIS 57264-00')": (0.8823529411764706, 15),
"(3034, 'TIME 08121')(2926, 'TIME 15677')": (0.8823529411764706, 15),
"(3034, 'TIME 08121')(2927, 'TIME 16424')": (0.8823529411764706, 15),