刚开始我用的是冒泡排序:
def sort(jsonlist):#冒泡排序,按地址大小重新排序
for i in range(len(jsonlist)-1):
for j in range(len(jsonlist)-1-i):
if jsonlist[j]['MODBUS从站ID'] == jsonlist[j+1]['MODBUS从站ID']:
if jsonlist[j]['起始地址'] > jsonlist[j+1]['起始地址']:
jsonlist[j],jsonlist[j+1] = jsonlist[j+1],jsonlist[j]
# print json.dumps(jsonlist,ensure_ascii=False,indent=4)
return jsonlist
if __name__=="__main__":
addrlist = [{"起始地址": 400000,"MODBUS从站ID": 1},{"起始地址": 400001,"MODBUS从站ID": 1},{"起始地址": 400002,"MODBUS从站ID": 1},
{"起始地址": 400003,"MODBUS从站ID": 1},{"起始地址": 400601,"MODBUS从站ID": 2},{"起始地址": 400602,"MODBUS从站ID": 2},{"起始地址": 400603,"MODBUS从站ID": 2},
{"起始地址": 400604,"MODBUS从站ID": 2}]
t = sort(addrlist)
处理数据较小时,速度还行,但是数据过万时,速度就特别慢,尤其是在arm,要十多分钟....
后来找到另一种方法就快了10倍不止:
def sort(jsonlist):
t = {}
addrlist = list()
for item in jsonlist:
if item['MODBUS从站ID'] not in t.keys():
t[item['MODBUS从站ID']] = list()
t[item['MODBUS从站ID']].append(item)
else:
t[item['MODBUS从站ID']].append(item)
for key in t.keys():
t[key].sort(key=lambda k: (k.get('起始地址', 0)))
addrlist += t[key]
return addrlist
=。=..................................