Разница в Python двух словарей по одному уникальному ключу
Нужно добавить в базу только разницу data_out - база данных.
Как добавить в базу данных только новости из data_out (регулярное обновление), а в базе данных нет этих данных? в дб должно быть без дубликатов!
database = [
{ id: 1, name: 'steve', age: '18'},
{ id: 2, name: 'margo', age: '17'},
{ id: 3, name: 'sten', age: '19'}
]
data_from_out = [
{ name: 'steve', age: '18'},
{ name: 'margo', age: '17'},
{ name: 'sten', age: '19'},
{ name: 'janifer', age: '21'},
{ name: 'mary', age: '21'}
]
Diff по имени / названию (этот уникальный параметр), и добавить в БД только diff.
добавить в БД =>
{ "name": 'janifer', "age": '21'},
{ "name": 'mary', "age": '21'}
.
def compare_diff(arr_in, arr_database, check_tag):
try:
db_records = {d[check_tag] for d in arr_database}
data_from_out_records = {d[check_tag] for d in arr_in}
# set difference
diff = data_from_out_records - data_from_out_records & db_records
# make array from diff set
diff = [d for d in data_from_out_records if d[check_tag] if diff]
return diff
except:
print('Error in compare_diff. File file.py.')
2 ответа
diff
вы описываете установленную разницу между data_from_out_records
а также db_records
db_records = {d["name"] for d in database}
data_from_out_records = {d["name"] for d in data_from_out}
diff = data_from_out_records - data_from_out_records & db_records
diff = [d for d in data_from_out if d["name"] if diff]
Рабочий код =>
def compare_diff(arr_in, arr_database, check_tag):
try:
db_records = {d[check_tag] for d in arr_database}
data_from_out_records = {d[check_tag] for d in arr_in}
# set difference
diff = data_from_out_records - (data_from_out_records & db_records)
# make array from diff set
diff_arr = [d for d in arr_in if d[check_tag] in diff]
return diff_arr
except:
print('Error in compare_diff')
return False
спасибо @Uri-Goren за помощь.