python list里面是dict时排序

    刚开始我用的是冒泡排序:

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
      =。=..................................

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值