【发布时间】:2021-04-05 13:40:44
【问题描述】:
我有一本结构如下的字典:
Key = A tuple containing two strings
Value = A tuple containing two float values
我想使用这两个值对这个字典进行排序。
要求为两个浮点字段选择具有最大值的前 10 条记录
有可能吗?
请在下面找到字典中的数据样本:
{"(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) }
预期输出:
{
"(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),
}
当排序方法用于元组的浮点值时。当元组中的第二个浮点值是两位数时,排序顺序有时会混淆。例如在下面显示的示例中,第一个浮点数的排序完全按 desc 顺序排序,但是,第二个浮点数排序不正确,因为 8
"(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),
【问题讨论】:
-
“使用两个值排序”到底是什么意思?按第一个排序,然后按第二个排序?
-
是的,要求实际上是选择两个浮动字段的最大值的前10条记录
-
提交我的答案后,我不确定您的上述评论是什么意思。你能提供一个你想要的输出的例子吗?
-
所以你想按元组的最大值排序?
-
我添加了一个示例,但我不确定应如何对预期输出中的前两行进行排序。每当第二个浮点数位置有两位数时,排序就会混淆。在帖子中也添加了此类混淆的示例。
标签: python python-3.x sorting dictionary