python-3.x - 您如何比较包含不可散列对象的字典?
问题描述
每个标题。我有 2 个字典,它们都包含列表:
d1 = {'AES': [256], 'Blowfish': [224, 448]}
d2 = {'AES': [128, 192, 256], 'Blowfish': [112, 224, 448], 'DES': [56]}
理想的结果应该是清晰且易于使用的;函数输出格式规定为 (str, int) 的元组,但我更关注如何比较它们并获得易于使用的结果。
作为记录,期望的结果应该表明上面唯一支持的加密格式是 AES 256 和 Blowfish 224 和 Blowfish 448
我觉得我应该补充一点,我的 python 版本是 3.6.8
附录:我觉得我说的不是很清楚,我很抱歉。我正在处理的函数将获取比较结果并选择具有最大值的密钥、值对(本质上,它根据密钥长度选择要使用的密码系统)。它将选择输出为一个元组,在本例中为 (Blowfish, 448)。我只是对比较部分更感兴趣,但我觉得我的清晰度不够好,所以再次道歉。
解决方案
这应该有效:
def intersection(obj1, obj2):
return list(set(obj1) & set(obj2))
d1 = {'AES': [256], 'Blowfish': [224, 448]}
d2 = {'AES': [128, 192, 256], 'Blowfish': [112, 224, 448], 'DES': [56]}
d3 = {key:intersection(d1[key], d2[key]) for key in intersection(d1, d2)}
# write results to file
with open('results.txt','w') as w:
lst = []
for key in d3:
for item in d3[key]:
lst.append((key, item))
print('\n'.join(map(str, lst)), file=w)
输出(在文件“results.txt”中):
('AES', 256)
('Blowfish', 224)
('Blowfish', 448)
推荐阅读
- java - OutOfMemory 错误:超出 GC 开销限制 - 休眠
- c# - ASP.Net Core 跨项目参考视图
- java - Spring Boot 找不到 AutoConfigurationReportLoggingInitializer
- tensorflow - 如何将 tensorflow hub 预训练模型转换为可通过 tensorflow 服务使用
- microcontroller - PIC 32 波特率
- php - Imagemagik Fred 的 CYLINDERIZE 脚本不会将图像转换为 gif
- c++ - 如何在我的项目中同时包含 wincodec.h 和 d3dx10.h(或 d3dx11)文件
- c++ - 为什么类外成员模板定义需要重复其声明“requires-clause”
- php - 在视图中获取数据的未定义变量
- elasticsearch - 由于冲突而无法合并:[无法更新排除 [_source] 的设置]