You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中按row分组并按col升序排序字典列表的实现方案

解决字典列表按row分组、组内按col排序的问题

我来帮你搞定这个问题!你的需求很清晰,咱们先梳理下核心目标:

  • 按row值对字典分组(row取值范围1-12)
  • 每组内的字典按col值升序排序
  • 最终生成一个按row顺序排列、组内col有序的新列表

先看你当前代码的问题

你在循环range(1,13)时,没有每次清空list_to_sort,导致后续的row组会包含之前row的元素;而且最后没有把排序好的每组正确合并到最终列表里,这才卡住了。

正确实现方案

这里提供两种方式,逻辑清晰且能满足你的需求:

方式一:用collections.defaultdict分组(更简洁)

from collections import defaultdict

# 你的待排序列表
mson = [
    {'col': 10, 'row': 1, 'size_x': 3, 'size_y': 3},
    {'col': 1, 'row': 1, 'size_x': 3, 'size_y': 2},
    {'col': 5, 'row': 1, 'size_x': 2, 'size_y': 2},
    {'col': 1, 'row': 3, 'size_x': 3, 'size_y': 2},
    {'col': 1, 'row': 5, 'size_x': 2, 'size_y': 2},
    {'col': 1, 'row': 7, 'size_x': 3, 'size_y': 2},
    {'col': 8, 'row': 4, 'size_x': 3, 'size_y': 3.0},
    {'col': 6, 'row': 7, 'size_x': 3, 'size_y': 2}
]

# 第一步:按row值分组,把相同row的字典放到同一个列表里
grouped = defaultdict(list)
for obj in mson:
    grouped[obj['row']].append(obj)

# 第二步:按row顺序(1-12)处理每组,组内按col升序排序后合并
mson_sorted = []
for row_num in range(1, 13):
    # 获取当前row对应的字典列表,没有则返回空列表
    row_objects = grouped.get(row_num, [])
    # 组内按col值升序排序
    sorted_row = sorted(row_objects, key=lambda x: x['col'])
    # 把排序后的列表追加到最终结果里
    mson_sorted.extend(sorted_row)

# 验证输出(和你的期望完全一致)
for item in mson_sorted:
    print(item)

方式二:不用额外模块(纯基础字典实现)

如果你不想导入defaultdict,用普通字典也能实现:

# 你的待排序列表
mson = [
    # 同上...
]

# 按row值分组
grouped = {}
for obj in mson:
    row = obj['row']
    if row not in grouped:
        grouped[row] = []
    grouped[row].append(obj)

# 生成最终排序列表
mson_sorted = []
for row_num in range(1, 13):
    if row_num in grouped:
        # 组内按col升序排序
        sorted_row = sorted(grouped[row_num], key=lambda x: x['col'])
        mson_sorted.extend(sorted_row)

核心逻辑说明

  1. 分组:先把所有字典按row归类,避免重复遍历整个列表12次,逻辑和效率都更优
  2. 按顺序处理:遍历1-12的row值,确保最终列表的row顺序完全符合要求
  3. 组内排序:对每个row组里的字典,用lambda x: x['col']作为排序键,实现col升序
  4. 合并结果:用extend把每组排序后的列表拼接成最终的一维列表,和你的输入格式一致

内容的提问来源于stack exchange,提问作者Rookie_123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:45:56