现有一个字典d,它储存了多个手机号以及这些手机号开通/停止业务的时间,它储存的数据的形式是这样的:d={'phone1':[time1,time2,...],'phone2':[time1',time2',...],...}。举个例子:
d={'111':[2013-08-09 12:11:11,2013-08-04 16:16:16,... ...], '222':[2013-07-06 15:15:15,2013-04-09 12:12:12,... ...], ... ...}。
我的问题是:我想要对这个字典储存的信息进行排序,排序的规则是:先按字典d中每个元素所对应的时间列表的长度(可以理解为该手机的业务量)进行第一次排序(从大到小),然后在时间列表长度(即业务量)相同的情况下按手机号大小进行排序
举个例子:
phoneNumber len([time列表])
999 100
555 100
222 100
666 80
333 80
888 60
777 60
111 60
444 40
结果的形式如上面列举的那样:先按业务量从大到小排序,在业务量相同的情况下按手机号从大到小排。
一个解决方法是:创建两个字典d1={'phone':[time列表]},d2={'phone':len([time])},然后将两个字典归并为一个列表l,
l=[('phone', [time列表], len([time]))]。(注意l存储数据的格式l=[(), (), (), ...])
然后通过operator模块中的itemgetter实现多重排序:sorted(l, key=itemgetter(2, 0), reverse=True)
key=itemgetter(2, 0)表示先按l迭代每个元祖的第三个元素排序,再按第一个排序。OK了
附:from operator import itemgetter
... ...