我正在尝试根据另一个列表来更新/添加字典项列表。
父母名单
{'date': '2019-03-07', 'start_time': '2019-03-07 10:08:21', 'duration': '5'}
{'date': '2019-03-07', 'start_time': '2019-03-07 10:14:43', 'duration': '15'}
{'date': '2019-03-07', 'start_time': '2019-03-07 10:31:22', 'duration': '13'}
新列表
{'date': '2019-03-07', 'start_time': '2019-03-07 10:08:21', 'duration': '5'}
{'date': '2019-03-07', 'start_time': '2019-03-07 10:14:43', 'duration': '15'}
{'date': '2019-03-09', 'start_time': '2019-03-09 10:31:22', 'duration': '13'}
{'date': '2019-03-10', 'start_time': '2019-03-10 10:31:22', 'duration': '13'}
{'date': '2019-03-11', 'start_time': '2019-03-11 10:31:22', 'duration': '13'}
{'date': '2019-03-12', 'start_time': '2019-03-12 10:31:22', 'duration': '13'}
我想用 NewList 中的新项目更新 ParentList 。如您所见,前者重复了后者的前2个项目。所以我只想将最后4个项目(来自 NewList )添加到 ParentList 中。
简单的方法是遍历每个 NewList 项,并检查 ParentList 中是否已经存在。
代码
for newItem in NewList:
bln_item_exists = False
for parentItem in ParentList:
if dict(newItem).get("date") == dict(parentItem).get("date") and dict(newItem).get("start_time") == dict(parentItem).get("start_time"):
bln_item_exists = True
break
if not bln_item_exists:
items_to_append.append(newItem)
我担心随着数据库大小的增加,性能会受到影响,是否有更有效的方法来执行相同的操作?
答案 0 :(得分:1)
对于这些类型的操作,我建议使用pandas。
import pandas as pd
df1 = pd.DataFrame(ParentList)
df2 = pd.DataFrame(NewList)
df3 = pd.concat([df1,df2])
df3.drop_duplicates(subset=['date', 'start_time'], inplace=True, keep='last')
答案 1 :(得分:0)
您可以创建»父列表«中存在的每个项目的哈希校验和列表:
import hashlib;
import json;
hashes = {}
parent_list = [ ... ]
def createHash (item):
hash_md5 = hashlib.md5()
hash_md5.update(json.dumps(item))
return hash_md5..hexdigest()
for item in parent_list:
hashes[createHash(item)] = true
def appendList(child_list):
for item in child_list:
hash = createHash(item)
if hash is not in hashes:
hashes[hash] = true
parent_list.append(item)
基本思想是:使用json序列化对象的哈希值测试是否相等,这样可以隐式检查所有属性。