test=[
{'is_blocked': 0, 'ip': '10.10.10.1', 'id': 113},
{'is_blocked': 0, 'ip': '10.10.10.16', 'id': 113},
{'is_blocked': 0, 'ip': '10.10.10.1', 'id': 114},
{'is_blocked': 0, 'ip': '10.10.10.16', 'id': 115},
{'is_blocked': 0, 'ip': '10.10.10.1', 'id': 114},
{'is_blocked': 0, 'ip': '10.10.10.16', 'id': 116}
]
def f(arr):
vals, ips, res=[], [], []
for i in arr:
ip= i['ip']
i2=i.copy()
del i2['ip']
try:
ips[vals.index(i2)]+= ","+ip
except:
vals.append(i2)
ips.append(ip)
for i in range(len(vals)):
vals[i]['ip']=ips[i]
res.append(vals[i])
return res
print str(f(test)).replace('}, {', '}, \n{')
dGVzdD1bCiAgICAgICAgeydpc19ibG9ja2VkJzogMCwgJ2lwJzogJzEwLjEwLjEwLjEnLCAnaWQnOiAxMTN9LAogICAgICAgIHsnaXNfYmxvY2tlZCc6IDAsICdpcCc6ICcxMC4xMC4xMC4xNicsICdpZCc6IDExM30sCiAgICAgICAgeydpc19ibG9ja2VkJzogMCwgJ2lwJzogJzEwLjEwLjEwLjEnLCAnaWQnOiAxMTR9LAogICAgICAgIHsnaXNfYmxvY2tlZCc6IDAsICdpcCc6ICcxMC4xMC4xMC4xNicsICdpZCc6IDExNX0sCiAgICAgICAgeydpc19ibG9ja2VkJzogMCwgJ2lwJzogJzEwLjEwLjEwLjEnLCAnaWQnOiAxMTR9LAogICAgICAgIHsnaXNfYmxvY2tlZCc6IDAsICdpcCc6ICcxMC4xMC4xMC4xNicsICdpZCc6IDExNn0KXQpkZWYgZihhcnIpOgogICAgICAgIHZhbHMsIGlwcywgcmVzPVtdLCBbXSwgW10KICAgICAgICBmb3IgaSBpbiBhcnI6CiAgICAgICAgICAgIGlwPSBpWydpcCddCiAgICAgICAgICAgIGkyPWkuY29weSgpCiAgICAgICAgICAgIGRlbCBpMlsnaXAnXQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBpcHNbdmFscy5pbmRleChpMildKz0gIiwiK2lwCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHZhbHMuYXBwZW5kKGkyKQogICAgICAgICAgICAgICAgaXBzLmFwcGVuZChpcCkKICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4odmFscykpOgogICAgICAgICAgICB2YWxzW2ldWydpcCddPWlwc1tpXQogICAgICAgICAgICByZXMuYXBwZW5kKHZhbHNbaV0pCiAgICAgICAgcmV0dXJuIHJlcwpwcmludCBzdHIoZih0ZXN0KSkucmVwbGFjZSgnfSwgeycsICd9LCBcbnsnKQ==
[{'ip': '10.10.10.1,10.10.10.16', 'is_blocked': 0, 'id': 113},
{'ip': '10.10.10.1,10.10.10.1', 'is_blocked': 0, 'id': 114},
{'ip': '10.10.10.16', 'is_blocked': 0, 'id': 115},
{'ip': '10.10.10.16', 'is_blocked': 0, 'id': 116}]