如何移除train_features中不在train_descriptions的键值对以统一长度?
同步两个字典的键:过滤train_features多余项
针对你的需求,有两种高效的处理方式,适用于不同场景:
方法1:生成新字典(推荐,保留原数据)
这种方式不会修改原始的train_features字典,而是创建一个只包含train_descriptions中存在的键的新字典,适合需要保留原数据的场景:
# 将有效键转为集合,提升查找效率(集合的in操作是O(1),远快于字典) valid_image_keys = set(train_descriptions.keys()) # 用字典推导式过滤出符合条件的键值对 train_features_filtered = {img_name: features for img_name, features in train_features.items() if img_name in valid_image_keys}
处理完成后,train_features_filtered的长度会和train_descriptions一致(44424)。
方法2:原地修改原字典(节省内存)
如果不需要保留原始的train_features,可以直接在原字典上删除多余的键,节省内存开销:
# 先收集所有不在train_descriptions中的键(不能直接遍历字典时删除,会触发异常) keys_to_delete = [img_name for img_name in train_features if img_name not in train_descriptions] # 逐个删除多余键 for img_name in keys_to_delete: del train_features[img_name]
执行后,原train_features的长度会变为44424。
验证结果
处理完成后可以通过以下代码确认长度一致:
print(len(train_descriptions) == len(train_features_filtered)) # 方法1用这个 # 或者方法2用这个: print(len(train_descriptions) == len(train_features))
内容的提问来源于stack exchange,提问作者Sticky
相关产品推荐
相关产品推荐

