Reputation: 498
I have a dict with different "types" -> modified and deleted. I want do 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 a unique list I do this:
dict((v['target']['id'],v) for 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 I get a unique list on the basis of a "couple of keys".
I need both 'types'. My 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'}}
]
Upvotes: 0
Views: 50
Reputation: 9863
Not sure I've understood your question, but, is this what you 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)
for v in my_list:
out[v["type"]].add(json.dumps(v["target"], sort_keys=True))
result = []
for k, v in out.iteritems():
for vv in out[k]:
result.append({
"type": k,
"target": json.loads(vv)
})
print out
print len(out["deleted"])
print len(out["modified"])
Upvotes: 1