Reputation:
Source list of dictionaries
[
{'main_id': 0, '_id': ObjectId('111111111111111'), 'key1': 'val1'},
{'main_id': 1, '_id': ObjectId('222222222222222'), 'key1': 'val2'},
{'main_id': 1, '_id': ObjectId('333333333333333'), 'key1': 'val3'},
{'main_id': 4, '_id': ObjectId('444444444444444'), 'key1': 'val4'},
{'main_id': 2, '_id': ObjectId('555555555555555'), 'key1': 'val5'},
]
filtered list of dictionaries
[
{'main_id': 0, '_id': ObjectId('111111111111111'), 'key1': 'val1'},
{'main_id': 1, '_id': ObjectId('222222222222222'), 'key1': 'val2'},
{'main_id': 2, '_id': ObjectId('555555555555555'), 'key1': 'val3'},
]
I want to get a new list of dictionaries:
[
{'main_id': 1, '_id': ObjectId('333333333333333'), 'key1': 'val3'},
{'main_id': 4, '_id': ObjectId('444444444444444'), 'key1': 'val4'},
]
in other words, I want a new list to contain values that don't exist in a filtered list. Your ideas?
Upvotes: 1
Views: 107
Reputation: 2885
Using original data:
# dummy!
ObjectId = str
original = [
{'main_id': 0, '_id': ObjectId('111111111111111'), 'key1': 'val1'},
{'main_id': 1, '_id': ObjectId('222222222222222'), 'key1': 'val2'},
{'main_id': 1, '_id': ObjectId('333333333333333'), 'key1': 'val3'},
{'main_id': 4, '_id': ObjectId('444444444444444'), 'key1': 'val4'},
{'main_id': 2, '_id': ObjectId('555555555555555'), 'key1': 'val5'},
]
filtered = [
{'main_id': 0, '_id': ObjectId('111111111111111'), 'key1': 'val1'},
{'main_id': 1, '_id': ObjectId('222222222222222'), 'key1': 'val2'},
{'main_id': 2, '_id': ObjectId('555555555555555'), 'key1': 'val3'},
]
new_list = [d for d in original if d not in filtered]
print(new_list)
Upvotes: 0
Reputation: 30453
One liner:
result = [s for s in original if s not in filtered]
or use filter
:
filter(lambda x: x not in filtered, original)
Upvotes: 2
Reputation: 29093
full = [
{'main_id': 0, '_id': ObjectId('111111111111111'), 'key1': 'val1'},
{'main_id': 1, '_id': ObjectId('222222222222222'), 'key1': 'val2'},
{'main_id': 1, '_id': ObjectId('333333333333333'), 'key1': 'val3'},
{'main_id': 4, '_id': ObjectId('444444444444444'), 'key1': 'val4'},
{'main_id': 2, '_id': ObjectId('555555555555555'), 'key1': 'val5'},
]
filtered = [
{'main_id': 0, '_id': ObjectId('111111111111111'), 'key1': 'val6'},
{'main_id': 1, '_id': ObjectId('222222222222222'), 'key1': 'val7'},
{'main_id': 2, '_id': ObjectId('555555555555555'), 'key1': 'val8'},
]
diff = [x for x in full if x not in filtered]
Upvotes: 1