首页 新闻 会员 周边

有关Python多重排序的问题

0
悬赏园豆:20 [已解决问题] 解决于 2013-08-16 11:41

现有一个字典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

结果的形式如上面列举的那样:先按业务量从大到小排序,在业务量相同的情况下按手机号从大到小排。

sarmn的主页 sarmn | 初学一级 | 园豆:133
提问于:2013-08-14 16:10
< >
分享
最佳答案
0

一个解决方法是:创建两个字典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

     ... ...

sarmn | 初学一级 |园豆:133 | 2013-08-16 11:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册