Как я могу оптимизировать эту повторную сортировку последовательности? - PullRequest
1 голос
/ 06 марта 2020

Я сортирую список словарей по одному из значений 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}]

Это работает, но у меня сейчас мозговой туман, и я чувствую, что это не лучший способ сделать это, как мне сделать это лучше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...