2017-08-16 84 views
-7

只需要添加到数据库区别data_out - 数据库。Python区别两个字典中的一个uniq键


如何添加到数据库只有来自data_out(定期刷新)的新闻和数据库没有这个数据? db中的 必须没有重复!


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按名称/标题(此uniq的PARAM),并加入到DB只差异。

添加到DB =>

{ "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.') 
+0

请编辑你的答案,这是很不清楚你在问什么。还请包括你已经试过的代码 – dhdavvie

回答

0

diff你所描述是差集data_from_out_recordsdb_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] 
+0

需要比较只有名称 – ALPHA

+0

更容易,修复它。 如果我的答案有帮助,请接受它或至少投票 –

+0

print(diff)#set() 需要返回json数组 – ALPHA

0

工作代码=>

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的帮助。