python - 根据列表中的每个第 n 个元素对字典进行排序

标签 python python-3.x algorithm sorting dictionary

编辑-更新问题:

为了更详细地阐述我的问题,我在 test1Res 中添加了更多详细信息:

我有一个名为 test1Res 的字典,其中有一些产品名称作为字典的“键”,该产品的测试结果作为键的值。

执行了 6 个测试(6 个标准),因此字典中的每个“值”都是 6 个整数的列表。

test1Res = {'Wrap': [3,7,13,142,16,193], 'Baby':[3,29,16,146,16,110], 'Goon':[3,7,22,41,88,65],'Marz':[3,9,14,8,56,0],'Adax':[2,2,28,13,79,39]}

我想对字典进行排序:

  • 字典应按其“值”的降序排列 - 6 个整数列表:

    • 第一步 - 根据第一个条件“a”排序,即每个列表的第 0 个元素。

订单:

test1Res = {'Wrap': [3,7,13,142,16,193], 'Baby':[3,29,16,146,16,110], 'Goon':[3,7,22,41,88,65],'Marz':[3,9,14,8,56,0],'Adax':[2,2,28,13,79,39]}

(与输入相同。)(考虑值的每个第 0 个元素执行排序。)

  • 第二步 - 对于第 0 个元素相似的每个列表(即相似产品的测试“a”的结果),根据第二个测试的结果“b”降序排序。

O/P:

test1Res = {'Baby':[3,29,16,146,16,110], 'Marz':[3,9,14,8,56,0], 'Wrap': [3,7,13,142,16,193], 'Goon':[3,7,22,41,88,65], 'Adax':[2,2,28,13,79,39]}

请注意,现在 'Wrap'、'Baby'、'Goon' 和 'Marz' 已根据第 2 点进行排序。排序时考虑了列表中每个第 1 个定位的元素,其第 0 个元素是相似的。 现在,由于 'Wrap' 和 'Goon' 的第一个元素相似,它应该在接下来的步骤中根据第二个元素对这 2 个键值对进行排序。

  • 后续步骤:类似地检查列表中第 i 个元素相似的每个第 (i+1) 个元素。

最终输出:

test1Res = { 'Baby':[3,29,16,146,16,110], 'Marz':[3,9,14,8,56,0], 'Goon':[3,7,22,41,88,65],  'Wrap': [3,7,13,142,16,193], 'Adax':[2,2,28,13,79,39]}

到目前为止,我已经尝试了很多方法,但只能通过蛮力将其排序到第 2 步。 ( O(n^3)) 由于时间复杂度,这是 Not Acceptable 。)

忽略任何语法错误。

原始问题:

我有一些产品和实验室测试结果存储在一个列表中,整个作为一个字典,如下所示:

test1Res = {'Goon':[3,7,22,41,88,65],'Marz':[3,9,14,8,56,0],'Adax':[2,2,28,13,79,39]}

列表的每个值代表特定测试的结果,比如测试 [a,b,c,d,e,f,g] .因此,对于“Goon”,测试结果 a是3等等。

我想做的是按以下方式对 test1Res 进行排序:

  • 排名下降,其中排名基于标准 a-g.

输出应该类似于:

test1Res = {'Marz':[3,9,14,8,56,0],'Goon':[3,7,22,41,88,65],'Adax':[2,2,28,13,79,39]}

在这里,首先它应该在每个键的列表中寻找第 0 个元素。如果相似,那么它应该只查找该列表的第二个元素,然后是第三个,然后是第四个,直到最后一个。

最佳答案

dict 保证仅在 CPython 3.6 及更高版本中保持插入顺序,因此最好使用 OrderedDict:

from collections import OrderedDict

test1Res = {'Wrap': [3,7,13,142,16,193], 'Baby':[3,29,16,146,16,110], 'Goon':[3,7,22,41,88,65],'Marz':[3,9,14,8,56,0],'Adax':[2,2,28,13,79,39]}
d = OrderedDict((sorted(test1Res.items(), key=lambda it: it[1], reverse=True)))
print(d)

打印:

OrderedDict([('Baby', [3, 29, 16, 146, 16, 110]), ('Marz', [3, 9, 14, 8, 56, 0]), ('Goon', [3, 7, 22, 41, 88, 65]), ('Wrap', [3, 7, 13, 142, 16, 193], ('Adax', [2, 2, 28, 13, 79, 39])])

关于python - 根据列表中的每个第 n 个元素对字典进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57760095/

相关文章:

python - 为什么我的pygame声音文件无法播放?

python - ConfigParser 和带值但不带键的部分

python - 如何在事先不知道名称的情况下调用类的实例

database - 维护 "ordering string"以排序数据库元素的算法

python - 导入 numpy c 扩展失败

python - LabelEncoder().fit_transform 给我负值?

python - 无法在顶级窗口中创建框架

python - 了解 Python 3.7 中的 For 循环执行

algorithm - 找出集合中不存在的第 n 个数

arrays - ruby assoc array 是内部的哈希表吗?什么是查找时间复杂度?