为了账号安全,请及时绑定邮箱和手机立即绑定

python 中怎么对json数组按某个字段进行排序(这个字段是字母加数字)大佬们有什么好的建议?

python 中怎么对json数组按某个字段进行排序(这个字段是字母加数字)大佬们有什么好的建议?

杨__羊羊 2019-07-27 00:03:45
问题描述我有这样一个json数组a=[{"id":863,"hostname":"hdfs"},{"id":822,"hostname":"admin"},{"id":865,"hostname":"Spark-1"},{"id":1074,"hostname":"Spark-10"},{"id":867,"hostname":"Spark-2"},{"id":1014,"hostname":"Spark-11"}]通过sort按hostname字段排序a.sort(key=lambdax:x["hostname"])得到的是这样的结果Spark-10在Spark-2前面[{"id":822,"hostname":"admin"},{"id":863,"hostname":"hdfs"},{"id":865,"hostname":"Spark-1"},{"id":1074,"hostname":"Spark-10"},{"id":1014,"hostname":"Spark-11"},{"id":867,"hostname":"Spark-2"},]而我希望得到这样一个结果[{"id":822,"hostname":"admin"},{"id":863,"hostname":"hdfs"},{"id":865,"hostname":"Spark-1"},{"id":867,"hostname":"Spark-2"},{"id":1074,"hostname":"Spark-10"},{"id":1014,"hostname":"Spark-11"}]请问我改如何进行处理
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

1、取当前列表出现的数字的最大长度2、把出现的数字的字符串进行补0操作
importre
defget_number(s):
re_digits=re.compile('(\d+)')
returnre_digits.search(s).group(1)ifre_digits.search(s)elseNone
defzfill(s,width):
number=get_number(s)
ifnumber:
s=s.replace(number,number.zfill(width))
returns.lower()
lst=[
{"id":863,"hostname":"hdfs"},
{"id":822,"hostname":"admin"},
{"id":111,"hostname":"test2"},
{"id":222,"hostname":"test11"},
{"id":865,"hostname":"Spark-1"},
{"id":1074,"hostname":"Spark-10"},
{"id":867,"hostname":"Spark-2"},
{"id":1014,"hostname":"Spark-11"}
]
max_width=int(max([get_number(_['hostname'])for_inlst]))
lst.sort(key=lambdax:zfill(x['hostname'],max_width))
printlst
                            
查看完整回答
反对 回复 2019-07-27
  • 2 回答
  • 0 关注
  • 1030 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号