根据具有x个元素的列表对具有n个元素的元组进行排序

我有一个如下所示的元组

all_combi= [
    ('a', 33.333333333333336),
    ('a', 38.333333333333336),
    ('a', 43.333333333333336),
    ('a', 48.333333333333336),
    ('a', 53.333333333333336),
    ('a', 58.333333333333336),
    ('a', 63.333333333333336),
    ('a', 68.33333333333334),
    ('a', 73.33333333333334),
    ('a', 78.33333333333334),
    ('a', 83.33333333333334),
    ('a', 88.33333333333334),
    ('a', 93.33333333333334),
    ('a', 98.33333333333334),
    ('b', 33.333333333333336),
    ('b', 38.333333333333336),
    ('b', 43.333333333333336),
    ('b', 48.333333333333336),
    ('b', 53.333333333333336),
    ('b', 58.333333333333336),
    ('b', 63.333333333333336),
    ('b', 68.33333333333334),
    ('b', 73.33333333333334),
    ('b', 78.33333333333334),
    ('b', 83.33333333333334),
    ('b', 88.33333333333334),
    ('b', 93.33333333333334),
    ('b', 98.33333333333334),
    ('c', 33.333333333333336),
    ('c', 38.333333333333336),
    ('c', 43.333333333333336),
    ('c', 48.333333333333336),
    ('c', 53.333333333333336),
    ('c', 58.333333333333336),
    ('c', 63.333333333333336),
    ('c', 68.33333333333334),
    ('c', 73.33333333333334),
    ('c', 78.33333333333334),
    ('c', 83.33333333333334),
    ('c', 88.33333333333334),
    ('c', 93.33333333333334),
    ('c', 98.33333333333334)]

我想根据这个列表对这个元组进行排序

instr_list. = ['a', 'b', 'c']

下面给出了预期输出的示例

[[
    ('a', 33.333333333333336),
    ('b', 33.333333333333336),
    ('c', 33.333333333333336)
 ], [
    [('a', 33.333333333333336),
    ('b', 38.333333333333336),
    ('c', 43.333333333333336)]
 ]]

我尝试了此处给出的以下解决方案,以根据列表对元组进行排序。但它并没有给出想要的结果。我尝试使用显式循环,但它不起作用。任何帮助表示赞赏...

def get_slab_list(all_combi, instr_list):
    out_master_list = []
    for i in range(len(instr_list)):
        #k=0
        out_list=[]
        
        for j in all_combi:
            if j[0] == instr_list[i]:
                out_list.append(j[1])

        out_master_list.append(out_list)
    return out_master_list

sample = get_slab_list(all_combi, instr_list)

回答

这是您可以尝试的解决方案,使用sorted+groupby

from itertools import groupby

# if data is already sorted, you can avoid this step.
all_combi = sorted(all_combi, key=lambda x: x[1])

print(
    [[i for i in v if i[0] in instr_list]  # filter out only required keys
     for _, v in groupby(all_combi, key=lambda x: x[1])]
)

[[('a', 33.333333333333336),
  ('b', 33.333333333333336),
  ('c', 33.333333333333336)],
 [('a', 38.333333333333336),
  ('b', 38.333333333333336),
  ('c', 38.333333333333336)],
...

  • You could have simply done `list(zip(*[list(j) for i, j in groupby(all_combi, key = lambda x: x[0])]))`

以上是根据具有x个元素的列表对具有n个元素的元组进行排序的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>