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
Post a Comment