按列表对嵌套列表进行排序

时间:2021-05-16 19:02:40

标签: python sorting nested-lists

如何通过匹配订单列表中给定顺序的每个嵌套列表的第一个元素对嵌套列表进行有效排序?

嵌套列表:[[97, 2, 0, 2], [97, 2, 0, 2], [98, 1, 2, 3], [99, 3, 3, 6], [99, 3, 3, 6], [99, 3, 3, 6], [101, 1, 6, 7], [100, 1, 7, 8]]

订单列表:[97, 98, 99, 99, 101, 100, 97, 99]

所需列表:[[97, 2, 0, 2], [98, 1, 2, 3], [99, 3, 3, 6], [99, 3, 3, 6], [101, 1, 6, 7], [100, 1, 7, 8][97, 2, 0, 2], [99, 3, 3, 6]]

1 个答案:

答案 0 :(得分:1)

尝试创建一个 dict 键到嵌套列表中的第一个值。然后从该 dict 构建输出列表:

nl = [[97, 2, 0, 2], [97, 2, 0, 2], [98, 1, 2, 3], [99, 3, 3, 6], [99, 3, 3, 6],
      [99, 3, 3, 6], [101, 1, 6, 7], [100, 1, 7, 8]]

# Associate first value in list to the list
d = {v[0]: v for v in nl}

order_lst = [97, 98, 99, 99, 101, 100, 97, 99]

# Grab the list associated to each value in order_list from d
out = [d[v] for v in order_lst]
print(out)

out

[[97, 2, 0, 2], [98, 1, 2, 3], [99, 3, 3, 6], [99, 3, 3, 6], [101, 1, 6, 7], 
[100, 1, 7, 8], [97, 2, 0, 2], [99, 3, 3, 6]]

*注意这假设嵌套列表中的所有子列表都是可接受的值,因为 dict 中不支持同一键的多个变体。