我有一份字典清单,我想整理一下。到目前为止,这就是我所拥有的:
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
复制相似问题