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

Python如何按数字值对字典列表的interface字段正确排序

问题原因

现有排序逻辑直接取interface字段的字符串值作为排序依据,执行的是字符串字典序比较:逐位对比字符ASCII值,不会解析字符串中的数值大小。例如对比0/3和0/16时,斜杠后第一位字符3的ASCII码大于1,就会判定0/3 > 0/16,最终排序结果和数值排序的预期不符。

修复方案

排序时将interface字符串按/拆分,把拆分后的每段编号转为整数,以整数元组作为排序键,即可按端口号的实际数值从小到大排序。

修改后的完整可运行代码:

from pprint import pprint

output_list = [{'interface': '0/20', 'mac': '01:23:45:67:89:AB'},
               {'interface': '0/16', 'mac': '12:34:56:78:9A:BC'},
               {'interface': '0/31', 'mac': '23:45:67:89:AB:CD'},
               {'interface': '0/5', 'mac': '34:56:78:9A:BC:DE'},
               {'interface': '0/3', 'mac': '45:67:89:AB:CD:EF'}]

mac_list = sorted(
    output_list,
    key=lambda d: tuple(int(seg) for seg in d['interface'].split('/'))
)

pprint(mac_list)

运行代码后输出完全匹配预期结果:

[{'interface': '0/3', 'mac': '45:67:89:AB:CD:EF'},
 {'interface': '0/5', 'mac': '34:56:78:9A:BC:DE'},
 {'interface': '0/16', 'mac': '12:34:56:78:9A:BC'},
 {'interface': '0/20', 'mac': '01:23:45:67:89:AB'},
 {'interface': '0/31', 'mac': '23:45:67:89:AB:CD'}]

该写法同时兼容多段式接口编号(如1/0/12这类框/槽/端口格式的接口名),无需额外修改即可正确排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:27:26