在多层元组Python的多层中按元素排序

2024-09-21 02:59:39 发布

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

我有一个由元组组成的元组,我想先按第二个元素排序,然后按最底层的第三个元素排序,然后对中间层的每个元组进行迭代。你知道吗

例如,我想对以下列表进行排序:

sampleToBeSorted = (
        (('D', 52, 'B'), ('D', 32, 'B')),
        (('D', 31, 'A'), ('D', 52, 'B')),
        (('A', 31, 'B'), ('D', 32, 'B')),
        (('C', 31, 'A'), ('B', 24, 'C'), ('C', 33, 'B')),
        (('D', 31, 'A'), ('D', 32, 'B'), ('C', 29, 'B'), ('D', 216, 'C')),
        (('D', 40, 'B'), ('A', 32, 'C')),
        )

所以它看起来是这样的:

sampleToBeSorted = (
        ((‘A’, 31, ‘B’), (‘D’, 32, ‘B’)),
        ((‘C’, 31, ‘A’), (‘B’, 24, ‘C’), (‘C’, 33, ‘B’)),
        ((‘D’, 31, ‘A’), (‘D’, 32, ‘B’), (‘C’, 29, ‘B’), (‘D’, 216, ‘C’)),
        ((‘D’, 31, ‘A’), (‘D’, 52, ‘B’)),
        ((‘D’, 40, ‘B’), (‘A’, 32, ‘C’)),
        ((‘D’, 52, ‘B’), (‘D’, 32, ‘B’)),
        )

我用了:

sortedSample = sorted(sampleToBeSorted, key= lambda x:(x[0][1],x[0][0],x[0][2]))

但这只对中间层的第一个元组排序。为了让它对中间层中的所有元组进行迭代,我想我可以将其修改为

sortedSample = sorted(sampleToBeSorted, key= lambda x:(x[i][1],x[i][0],x[i][2]) for i in range(len(sampleToBeSorted[x])) 

这是无效的语法,我不太明白什么是正确的方式来写这个。有什么想法吗?如果这类问题以前有人回答过,我提前向你道歉,但我已经试过并且搜索了我能想到的一切。你知道吗


Tags: lambdakeyin元素列表forlen排序
1条回答
网友
1楼 · 发布于 2024-09-21 02:59:39

试试这个:

sortedSample = sorted(sampleToBeSorted, key= lambda x:[(i[1],i[0],i[2]) for i in x])

关键是根据您的标准重新排序的元组列表

结果:

[(('A', 31, 'B'), ('D', 32, 'B')), 
(('C', 31, 'A'), ('B', 24, 'C'), ('C', 33, 'B')),
(('D', 31, 'A'), ('D', 32, 'B'), ('C', 29, 'B'), ('D', 216, 'C')),    
(('D', 31, 'A'), ('D', 52, 'B')), 
(('D', 40, 'B'), ('A', 32, 'C')),
(('D', 52, 'B'), ('D', 32, 'B'))]

相关问题 更多 >

    热门问题