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

如何用Python从列表中提取各服务的最新版本?

提取各服务的最新版本解决方案

针对你给出的版本列表,直接对版本字符串排序会因为ASCII顺序和语义化版本规则不符导致错误(比如beta的ASCII码比rc小,字符串排序会把v1.1.0.10-beta1排在v1.1.0.10-rc1前面,但实际后者版本更高)。可以用Python的packaging库来正确解析和比较语义化版本,步骤如下:

步骤说明

  • 拆分每个条目,分离服务标识(比如base/domain/service1)和版本号(比如v1.1.0.10-rc1)
  • 按服务标识分组,收集每个服务的所有版本
  • 使用packaging.version.Version类解析版本,该类会遵循语义化版本规则进行比较,选出每个服务的最高版本

代码实现

from packaging.version import Version
from collections import defaultdict

LIST = [
    "base/domain/service1:v1.1.0.10-rc1",
    "base/domain/service1:v1.1.0.10-beta1",
    "base/domain/service1:v1.1.0.8-beta2",
    "base/domain/service1:v1.1.0.7",
    "base/domain/service2:v1.1.0.10-rc1",
    "base/domain/service2:v1.1.0.10-beta1",
    "base/domain/service2:v1.1.0.8-beta2",
    "base/domain/service2:v1.1.0.7"
]

# 按服务分组存储版本
service_versions = defaultdict(list)
for item in LIST:
    service, version = item.split(":", 1)
    service_versions[service].append(version)

# 提取每个服务的最新版本
max_versions = {}
for service, versions in service_versions.items():
    # 用Version类解析后排序,取最后一个(最大版本)
    sorted_versions = sorted(versions, key=lambda v: Version(v))
    max_versions[service] = sorted_versions[-1]

# 输出结果
for service, max_v in max_versions.items():
    print(f"{service}: max_version = {max_v}")

运行结果

base/domain/service1: max_version = v1.1.0.10-rc1
base/domain/service2: max_version = v1.1.0.10-rc1

为什么这个方法可行

packaging.version.Version会将版本号拆分为核心版本、预发布标签等部分,按照语义化版本的优先级规则比较:

  • 核心版本数字部分从左到右比较(比如1.1.0.10 > 1.1.0.8)
  • 预发布标签的优先级:rc > beta > alpha,所以v1.1.0.10-rc1会被判定为比v1.1.0.10-beta1更高的版本

如果没有安装packaging库,先执行安装命令:

pip install packaging

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:55:06