编辑-更新问题:
为了更详细地阐述我的问题,我在 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/