我有一份字典清单,我想整理一下。到目前为止,这就是我所拥有的:
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)
然而,它并没有按照我想要的方式整理字典。
"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
我怎样才能把它分类,让它看起来像这样:
[{'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'}]
发布于 2022-06-22 12:29:45
您需要从字符串中取出数字:
sorted(output_list, key=lambda d: int(d['interface'].split("/")[1]))
这假设接口的第一部分不会改变。
如果它发生变化,则需要用前导零重新格式化这两个部分:
sorted(output_list, key=lambda d: "/".join([f"{int(x):02d}" for x in d['interface'].split("/")]))
发布于 2022-06-22 12:22:15
试试这个:
mac_list = sorted(output_list, key=lambda d: int(d['interface'].split("/")[1]))
如果interface
值可以从0
以外的其他值开始,并且希望它成为排序值的一部分,那么您可以使用以下内容:
mac_list = sorted(output_list, key=lambda d: int(d['interface'].split("/")[0]) * 10000 + int(d['interface'].split("/")[1]))
发布于 2022-06-22 12:23:41
如果你总是有0/???
的话。试试这个:
mac_list = sorted(output_list, key= lambda x: int(x['interface'][2:]))
输出:
[{'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
__如何?)
# 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:])))
输出:
[{'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'}]
https://stackoverflow.com/questions/72715375
复制相似问题