python - 如何优化这种重复序列排序?
问题描述
我正在按其中一个 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}]
这行得通,但我目前有脑雾,觉得这不是最好的方法,我应该如何做得更好?
解决方案
推荐阅读
- xamarin - 从“电子邮件”共享/复制到 Xamarin App
- sharepoint - SharePoint“DisplayAuthor”精简程序是什么意思?
- java - 如何正确打印这个三角形的字符?
- python - 使用 Keras RNN 处理自己准备的 IMDB 数据时,准确率永远不会超过 0.5
- office-js - 2016 ProPlus MSI 版本 (MSO 16.0.4549.1000) 上的 Outlook 加载项为 displayDialogAsync 提供“权限被拒绝”错误
- python - 尝试使用 scapy 嗅探 http 数据包
- python - 使用 countVectorizer 计算 Skip-gram 频率
- python - 了解 RPC 装饰器:使用 SOAP 和 XML 的复杂返回参数
- c - 程序查找图的两个给定顶点之间是否存在路径
- java - 在春季批处理平面文件阅读器中跳过页脚和标题记录