itertools模块

昨天写编程的时候遇到一个小逻辑.

同事给我传的数据类似于以下这条数据, 列表中的元素是个字典, 元素不止一个有很多, 且字典内的各个键值对的数据随机性较大.

[{'id': 10433, 'data': '{"num":18}', 'type': 'timelinelike', 'android_ip': '0.0.0.0', 'status': '1', 'number': 3}]

但, 为了业务需求, 我需要将同事传来的数据在进行整理. 需要将列表里的元素具有相同android_ip的放到一个列表中, 即使找不到和它相同的也要单独的放到一个列表中, 最后将这些整理好的列表在放入一个大列表中.

然后, 我就敲啊敲.

最开始的思路是

根据android_ip的值来判断

list = [ ]

list1 = [ ]

.......

for info in info_list:

      if info['android_ip'] == 'ip':(ip的值我们是知道的, 不是随机生成的.)

         list1.append(info)

     elif .....:

         ...........

list.append(list1)

.....

是不是觉得好像完成了工作了, 严格意义上来说是的. 但是这里有个问题, 因为这个android_ip以后会有很多很多, 而且同事传的时候是随机选的. 但是你为了确保程序不出错, 你需要一直elif下去, 即使传过来的androidip是192.168.1.1也需要判断192.168.1.2 .......是不是觉得就不太合适了~~~~

所以, 作为一名python程序员, 这样写是不应该, 会让人笑话的.

后来我就尝试其它写法

升级版:

keys = set(info['android_ip'] for info in info_list)
mission_list = [[d for d in info_list if key == d['android_ip']] for key in keys]

print(mission_list)

完美解决

两句话就搞定, 但是这我觉得写的还不是很牛逼, 让人一眼就看懂了, 就不能装b了.

骨灰级:

import itertools

info = itertools.groupby(info_list, lambda x: x['android_ip'])
mission_list = [list(v) for key, v in info]

print(mission_list)

嗯, 不错. 这样写的话就非常高大上了, 一看就是大神的操作~~~瞬间有逼格.

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

她最爱橘了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值