编辑-更新的问题:
为了进一步阐述我的问题,我在 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个整数的列表:
O / P:
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个元素执行排序。)
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]}
请注意,现在已根据第2点对“包裹”,“婴儿”,“古恩”和“马尔兹”进行了排序。考虑到列表的每个第1个定位元素(第0个元素类似),进行了排序。
现在,由于'Wrap'和'Goon'的第一个元素相似,因此在下一步中应仅根据第二个元素对这两个键值对进行排序。最终输出:
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)),由于时间复杂性,这是不可接受的。)
忽略任何语法错误。
原始问题:
我将一些产品和实验室测试结果存储在一个列表中,并将其整体作为一个字典,如下所示:
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 进行排序,以使其:
输出应类似于:
test1Res = {'Marz':[3,9,14,8,56,0],'Goon':[3,7,22,41,88,65],'Adax':[2,2,28,13,79,39]}
在这里,首先应在每个键的列表中查找第0个元素。如果是相似的,则应仅再寻找该列表的第二个元素,然后是第三个,然后是第四个,直到最后一个。
答案 0 :(得分:3)
保证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])])
答案 1 :(得分:2)
您可以对值进行排序并以新顺序创建新字典:
>>> dict(sorted(test1Res.items(), key=operator.itemgetter(1), reverse=True))
{'Goon': [3, 7, 22, 41, 88, 65], 'Adax': [2, 2, 28, 13, 79, 39], 'Marz': [1, 9, 14, 8, 56, 0]}
您提供了两个不同的字典,这是第二个字典的结果:
>>> test1Res = {'Marz':[3,9,14,8,56,0],'Goon':[3,7,22,41,88,65],'Adax':[2,2,28,13,79,39]}
>>> dict(sorted(test1Res.items(), key=operator.itemgetter(1), reverse=True))
{'Marz': [3, 9, 14, 8, 56, 0], 'Goon': [3, 7, 22, 41, 88, 65], 'Adax': [2, 2, 28, 13, 79, 39]}
答案 2 :(得分:1)
如果您不想导入operator
模块:
test1Res = {'Goon':[3,7,22,41,88,65],'Marz':[3,9,14,8,56,0],'Adax':[2,2,28,13,79,39]}
result = dict(sorted(test1Res.items(), key=lambda elem: elem[1], reversed=True))
print(result)
结果:
{'Adax': [2, 2, 28, 13, 79, 39], 'Goon': [3, 7, 22, 41, 88, 65], 'Marz': [3, 9, 14, 8, 56, 0]}