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

Python排序:跨品牌归并相同取货地址的商品

实现品牌分组+同取货地址连续+组内原序保留的排序方案

需求明确

  • 输入列表已按品牌完成排序,需保持品牌分组的整体顺序不变
  • 不同品牌中取货地址相同的商品必须连续排列
  • 每个品牌组内的商品原始相对顺序需完整保留(稳定排序要求)

示例输入

items = [
    {"brand": "Adidas", "pick_up_address": 1},
    {"brand": "Adidas", "pick_up_address": 2},
    {"brand": "Adidas", "pick_up_address": 2},
    {"brand": "Adidas", "pick_up_address": 3},
    {"brand": "Adidas", "pick_up_address": 3},
    {"brand": "Adidas", "pick_up_address": 4},
    {"brand": "Adidas", "pick_up_address": 5},
    {"brand": "Adidas", "pick_up_address": 5},
    {"brand": "Adidas", "pick_up_address": 5},
    {"brand": "Adidas", "pick_up_address": 5},
    {"brand": "Nike", "pick_up_address": 2},
    {"brand": "Nike", "pick_up_address": 2}
]

期望输出

sorted_items = [
    {"brand": "Adidas", "pick_up_address": 1},
    {"brand": "Adidas", "pick_up_address": 3},
    {"brand": "Adidas", "pick_up_address": 3},
    {"brand": "Adidas", "pick_up_address": 4},
    {"brand": "Adidas", "pick_up_address": 5},
    {"brand": "Adidas", "pick_up_address": 5},
    {"brand": "Adidas", "pick_up_address": 5},
    {"brand": "Adidas", "pick_up_address": 5},
    {"brand": "Adidas", "pick_up_address": 2},
    {"brand": "Adidas", "pick_up_address": 2},
    {"brand": "Nike", "pick_up_address": 2},
    {"brand": "Nike", "pick_up_address": 2}
]

解决方案思路

核心逻辑是通过取货地址的最后出现位置作为排序依据,结合Python内置的稳定排序特性实现需求:

  1. 遍历原列表,统计每个取货地址最后一次出现的索引位置
  2. 以该索引位置为排序键,对原列表进行稳定排序:
    • 同地址的商品会因为排序键相同,保持原有的相对顺序(原列表已按品牌排序,因此同地址的不同品牌商品自然连续,且品牌组内原序保留)
    • 最后出现位置越靠前的地址,排序优先级越高,确保不同地址的分组顺序符合示例要求

代码实现

# 统计每个取货地址的最后出现索引
last_occurrence = {}
for idx, item in enumerate(items):
    addr = item["pick_up_address"]
    last_occurrence[addr] = idx  # 持续更新,最终保存最后一次出现的索引

# 稳定排序:按地址最后出现索引升序排列
sorted_items = sorted(items, key=lambda x: last_occurrence[x["pick_up_address"]])

# 验证输出(可选)
for item in sorted_items:
    print(item)

方案说明

  • 稳定排序特性确保了原列表中同地址元素的相对顺序不变,既保留了品牌组内的原始顺序,也保证了不同品牌的同地址商品连续排列
  • 原列表已按品牌排序,因此同地址的商品在原列表中是按品牌分组的,排序后自然保持该分组结构
  • 统计最后出现索引的操作时间复杂度为O(n),排序操作时间复杂度为O(n log n),整体效率较高

内容的提问来源于stack exchange,提问作者Roni Jack Vituli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:17:45