亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1017 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號