根据IP将列表分组

在CSDN论坛里面发现了一个帖子,问题如下:

数组如下:

[

{'ip':'192.168.1.1','xxx':'app1'},

{'ip':'192.168.1.1','yyy':'app2'},

{'ip':'192.168.1.2','xxx':'app3'},

{'ip':'192.168.1.2','yyy':'app4'},

{'ip':'192.168.1.3','xxx':'app5'},

{'ip':'192.168.1.3','yyy':'app6'},

]

像如上一个数组,里面包含多个IP的不同信息,我希望将其拆分为多个数组,如:

[{'ip':'192.168.1.1','xxx':'app1'},{'ip':'192.168.1.1','yyy':'app2'}],

[{'ip':'192.168.1.2','xxx':'app3'},{'ip':'192.168.1.2','yyy':'app4'}],

[{'ip':'192.168.1.3','xxx':'app5'},{'ip':'192.168.1.3','yyy':'app6'}]

或者这样也可以:

[

{'ip':'192.168.1.1','xxx':'app1','yyy':'app2'},

{'ip':'192.168.1.2','xxx':'app3','yyy':'app4'},

{'ip':'192.168.1.3','xxx':'app5','yyy':'app6'},

]

看到这个问题,我一下就来了兴趣,于是有了如下的代码片:

#!/bin/usr/python
#coding:utf-8

values = [
{'ip':'192.168.1.1','xxx':'app1'},
{'ip':'192.168.1.1','yyy':'app2'},
{'ip':'192.168.1.2','xxx':'app3'},
{'ip':'192.168.1.2','yyy':'app4'},
{'ip':'192.168.1.3','xxx':'app5'},
{'ip':'192.168.1.3','yyy':'app6'},
]

def getResult_1(values):
	res = []
	ips = set([ values[i]['ip'] for i in range(0,len(values))])
	for ip in ips:
		tmp = []
		for i in range(0,len(values)):
			#获取相同的IP所在的字典
			if ip == values[i]['ip']:
				tmp.append(values[i]) #追加列表
		res.append(tmp)
	print res
	return res

def getResult_2(values):
	res = []
	ips = set([ values[i]['ip'] for i in range(0,len(values))])
	for ip in ips:
		tmp = {}
		for i in range(0,len(values)):
			#获取相同的IP所在的字典
			if ip == values[i]['ip']:
				tmp.update(values[i]) #更新字典
		res.append(tmp)
	print res
	return res

if __name__ == '__main__':
	getResult_1(values)
	getResult_2(values)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值