Разница в 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 за помощь.

Другие вопросы по тегам