首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按数字在字典列表中排序的Python

按数字在字典列表中排序的Python
EN

Stack Overflow用户
提问于 2022-06-22 12:20:13
回答 6查看 61关注 0票数 2

我有一份字典清单,我想整理一下。到目前为止,这就是我所拥有的:

代码语言:javascript
运行
复制
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: d['interface'])

pprint(mac_list)

然而,它并没有按照我想要的方式整理字典。

代码语言:javascript
运行
复制
"C:\Program Files\Python310\python.exe" "C:/Scripts/Python/test1.py"
[{'interface': '0/16', 'mac': '12:34:56:78:9A:BC'},
 {'interface': '0/20', 'mac': '01:23:45:67:89:AB'},
 {'interface': '0/3', 'mac': '45:67:89:AB:CD:EF'},
 {'interface': '0/31', 'mac': '23:45:67:89:AB:CD'},
 {'interface': '0/5', 'mac': '34:56:78:9A:BC:DE'}]

Process finished with exit code 0

我怎样才能把它分类,让它看起来像这样:

代码语言:javascript
运行
复制
[{'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'}]
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2022-06-22 12:29:45

您需要从字符串中取出数字:

代码语言:javascript
运行
复制
sorted(output_list, key=lambda d: int(d['interface'].split("/")[1]))

这假设接口的第一部分不会改变。

如果它发生变化,则需要用前导零重新格式化这两个部分:

代码语言:javascript
运行
复制
sorted(output_list, key=lambda d: "/".join([f"{int(x):02d}" for x in d['interface'].split("/")]))
票数 2
EN

Stack Overflow用户

发布于 2022-06-22 12:22:15

试试这个:

代码语言:javascript
运行
复制
mac_list = sorted(output_list, key=lambda d: int(d['interface'].split("/")[1]))

如果interface值可以从0以外的其他值开始,并且希望它成为排序值的一部分,那么您可以使用以下内容:

代码语言:javascript
运行
复制
mac_list = sorted(output_list, key=lambda d: int(d['interface'].split("/")[0]) * 10000 + int(d['interface'].split("/")[1]))
票数 2
EN

Stack Overflow用户

发布于 2022-06-22 12:23:41

如果你总是有0/???的话。试试这个:

代码语言:javascript
运行
复制
mac_list  = sorted(output_list, key= lambda x: int(x['interface'][2:]))

输出:

代码语言:javascript
运行
复制
[{'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/3 to 1.3__如何?)

代码语言:javascript
运行
复制
# 1/3 -> 1.3 then get as float and sort
sorted(output_list, key= lambda x: float(x['interface'].replace('/', '.')))

# or as string
sorted(output_list, key= lambda x: (int(x['interface'][:1]),int(x['interface'][2:])))

输出:

代码语言:javascript
运行
复制
[{'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'},
 {'interface': '1/3', 'mac': '45:67:89:AB:CD:EF'}]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72715375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档