python - Unique dictionary on basis of multiple keys -


i have dict different "types" -> modified , deleted. want unique this.

mydict =  [ {'type': 'deleted', 'target': {'id': u'1', 'foo': {'value': ''}}}, {'type': 'modified', 'target': {'id': u'1', 'foo': {'value': ''}}}, {'type': 'deleted', 'target': {'id': u'1', 'foo': {'value': ''}}},  {'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}}, {'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}}, {'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}},  {'type': 'deleted', 'target': {'id': u'3', 'foo': {'value': ''}}}, {'type': 'modified', 'target': {'id': u'3', 'foo': {'value': ''}}}, {'type': 'deleted', 'target': {'id': u'3', 'foo': {'value': ''}}} ] 

to achieve unique list this:

dict((v['target']['id'],v) v in mydict).values()  [ {'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'1'}},  {'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'2'}}, {'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'3'}}  ] 

how can unique list on basis of "couple of keys".

i need both 'types'. expected result is:

[ {'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'1'}},  {'type': 'modified', 'target': {'foo': {'value': ''}, 'id': u'1'}},  {'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'2'}}, {'type': 'modified', 'target': {'foo': {'value': ''}, 'id': u'2'}},  {'type': 'deleted', 'target': {'foo': {'value': ''}, 'id': u'3'}} ] 

not sure i've understood question, but, want?

from collections import defaultdict import json  my_list = [     {'type': 'deleted', 'target': {'id': u'1', 'foo': {'value': ''}}},     {'type': 'modified', 'target': {'id': u'1', 'foo': {'value': ''}}},     {'type': 'deleted', 'target': {'id': u'1', 'foo': {'value': ''}}},      {'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}},     {'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}},     {'type': 'deleted', 'target': {'id': u'2', 'foo': {'value': ''}}},      {'type': 'deleted', 'target': {'id': u'3', 'foo': {'value': ''}}},     {'type': 'modified', 'target': {'id': u'3', 'foo': {'value': ''}}},     {'type': 'deleted', 'target': {'id': u'3', 'foo': {'value': ''}}} ]  out = defaultdict(set)  v in my_list:     out[v["type"]].add(json.dumps(v["target"], sort_keys=true))  result = [] k, v in out.iteritems():     vv in out[k]:         result.append({             "type": k,             "target": json.loads(vv)         })  print out print len(out["deleted"]) print len(out["modified"]) 

Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -