根据列表中的每一个元素对听写进行排序

2024-04-19 21:42:04 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑-更新问题:

为了更详细地阐述我的问题,我在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”按降序排序。你知道吗

订单号:

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点进行了排序。考虑列表的每个第一个位置元素执行排序,其第0个元素相似。 现在,由于'Wrap'和'Goon'的第一个元素是相似的,所以在接下来的步骤中,应该只根据第二个元素对这两个键值对进行排序。你知道吗

  • 接下来的步骤:类似地检查列表中第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)),由于时间复杂性,这是不可接受的。)

忽略任何语法错误。你知道吗

原始问题:

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

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

list的每个值表示一个特定测试的结果,比如test[a,b,c,d,e,f,g]。所以,对于“Goon”,测试a的结果是3,依此类推。你知道吗

我要做的是对测试1进行排序,以便:

  • 它的排名在下降,而排名是基于标准的 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个元素。如果它是相似的,那么它只应该查找列表中的第二个元素,然后是第三个,然后是第四个,直到最后一个。你知道吗


Tags: 元素列表标准字典排序产品整数baby
3条回答

dict只保证在cpython3.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])])

如果不希望导入^{}模块:

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]}

您可以对值进行排序,并按新顺序创建新词典:

>>> 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]}

相关问题 更多 >