首页 > 解决方案 > 如何优化这种重复序列排序?

问题描述

我正在按其中一个 dict 值对字典列表进行排序,并希望有一个排序序列,如 1,2,3,1,2,3,3 这就是我想出的:

输入:

dicts = [{'name':'a', 'order':2}, {'name':'b', 'order':2}, {'name':'c', 'order':1}, {'name':'d', 'order':3}, {'name':'e', 'order':3}, {'name':'f', 'order':1}, {'name':'g', 'order':1}]

功能:

from itertools import groupby, zip_longest
from typing import List

def seq_sort(input: List[dict]) -> List[dict]:
  new_seq = []
  # order the dicts
  ordered = sorted(input, key=lambda x: x['order'])
  # group the dicts
  group = [
    [p for p in v] for k, v in groupby(
      ordered,
      key=lambda x:x['order']
    )
  ]
  # put into new list in sequential order
  # grouped lists could be different lengths
  for groups in zip_longest(*group):
      for g in groups:
          if g is not None:
            new_seq.append(g)
  return new_seq

print(seq_sort(dicts))

输出:

[{'name': 'c', 'order': 1}, {'name': 'a', 'order': 2}, {'name': 'd', 'order': 3}, {'name': 'f', 'order': 1}, {'name': 'b', 'order': 2}, {'name': 'e', 'order': 3}, {'name':'g', 'order': 1}]

这行得通,但我目前有脑雾,觉得这不是最好的方法,我应该如何做得更好?

标签: pythonpython-3.xsortingsequence

解决方案


推荐阅读