You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python对比不同长度字典的values并输出不匹配项?

问题:对比两个不同长度字典的SHA值,找出不匹配的键值对

需要对比本地电脑与NAS上文件的SHA值(存储在两个长度不同的字典中),找出并输出不匹配的键值对用于后续处理。

示例字典

x = {'C:\\test\\1\\123.zip': 'df029a659e13fb455aa3d39079caf4e52e2fcd30',
     'C:\\test\\1\\lalala.zip': '45cef0d73b817a890183227c88719af99e68ec47'}
y = {'/var/data/123.zip': 'df029a659e13fb455aa3d39079caf4e52e2fcd30',
     '/var/data/234.zip': '41b845d81c0c0b4510e356c26206d0f9b118285d',
     '/var/data/345.zip': 'dba1f5a7c1c34327ee261f95b58804ceae5c3577'}

期望输出

'C:\test\1\lalala.zip': '45cef0d73b817a890183227c88719af99e68ec47' - differ

现有代码的问题

现有代码通过**键(文件路径)**匹配两个字典,但本地和NAS的文件路径完全不同,k in y永远为False,无法找到任何匹配项;同时逻辑只检查键存在且值不同的情况,完全不符合通过SHA值匹配的需求:

shared_items = {k: x[k] for k in x if k in y and x[k] != y[k]}
print(shared_items)

解决方案

核心思路是通过SHA值(字典的值)建立两个字典的关联,相同SHA值代表是同一个文件。具体步骤:

  1. 将NAS的字典y转换为反向映射:键为SHA值,值为对应的NAS文件路径,方便快速查找SHA是否存在
  2. 遍历本地字典x的每一组键值对,检查当前SHA值是否存在于反向映射中:
    • 若不存在,说明该本地文件在NAS上没有匹配的SHA,标记为不匹配项
    • 若存在,说明两边有相同文件,跳过

代码实现

# 构建NAS字典的反向映射:SHA值 -> 文件路径
y_sha_map = {sha: path for path, sha in y.items()}

# 遍历本地字典,找出不匹配项
for local_path, local_sha in x.items():
    if local_sha not in y_sha_map:
        print(f"'{local_path}': '{local_sha}' - differ")

运行结果

'C:\test\1\lalala.zip': '45cef0d73b817a890183227c88719af99e68ec47' - differ

内容的提问来源于stack exchange,提问作者Леонид

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 21:15:00