基于哈希的重复视频检测器中相同哈希视频能否存入同个字典键?
问题原因
你的代码存在2处逻辑错误,和字典本身的特性无关:
- 哈希存在性判断逻辑错误:
if v in dupe_Finder.items()中items()返回的是(键, 值)格式的元组集合,你需要判断的是哈希值v是否为dupe_Finder的已有键,应该改为if v in dupe_Finder。 - 首次赋值格式错误:首次给
dupe_Finder的哈希键赋值时,你直接赋值为单个文件名字符串,而非存储文件名的列表,导致后续相同哈希的文件既无法追加、也会直接覆盖原有值。
修复后的代码
仅需要修改键值翻转的循环部分即可:
# flip the values and keys, so you can see which keys have the same values for i, v in storage_Dictionary.items(): if v in dupe_Finder: dupe_Finder[v].append(i) else: dupe_Finder[v] = [i] # 首次赋值初始化为列表 print(dupe_Finder)
可选优化建议
如果后续需要检测大体积视频,不要直接用read()一次性加载整个文件到内存,可以分块更新哈希值,避免内存溢出:
def get_file_hash(file_path, chunk_size=4096): hashed = hashlib.sha256() with open(file_path, 'rb') as f: while chunk := f.read(chunk_size): hashed.update(chunk) return hashed.hexdigest()
内容的提问来源于stack exchange,提问作者user9476995
相关产品推荐
相关产品推荐

