如何遍历Python字典键计算Unicode和并统计碰撞(等值)数量
需求说明
你需要实现的功能为:遍历所有键值对,计算每个键的字符串Unicode编码之和,最终输出求和结果列表,进而统计哈希碰撞数量。
前置注意点
Python原生字典不支持重复键,你给出的示例字典a = {'Andres':234,'Paul':345,'Andres':675}实际存储时只会保留最后一个'Andres':675,无法保留两个Andres键。如果要保留重复键的测试场景,建议将字典改为元组列表结构:[('Andres',234), ('Paul',345), ('Andres',675)]。
正确实现代码
适配重复键场景(元组列表输入)
# 测试数据(保留重复键) a = [('Andres',234), ('Paul',345), ('Andres',675)] def get_key_unicode_sum(pairs): collisions = [] for key, _ in pairs: # 每次计算新键的和前重置result为0 result = 0 for char in key: result += ord(char) collisions.append(result) return collisions
调用get_key_unicode_sum(a)即可得到输出[605, 402, 605]。
后续统计碰撞数量的代码需要修正为:
collision_list = get_key_unicode_sum(a) collision_count = len(collision_list) - len(set(collision_list))
适配普通无重复键字典场景
如果输入为普通无重复键Python字典,可使用如下代码:
# 普通无重复键字典 a = {'Andres':234,'Paul':345} def get_key_unicode_sum(input_dict): collisions = [] for key in input_dict: result = 0 for char in key: result += ord(char) collisions.append(result) return collisions
原尝试代码的错误点
- 遍历字典时误用了未定义的
teste变量,应使用传入的参数 - 字典
items是方法,需要加括号写为items() - 每次计算新键的Unicode和前没有重置
result为0,会累加之前的结果 - 未定义
a_string变量,应使用遍历得到的键k - 没有初始化
collisions列表,也没有最终返回该列表 - 原生Python字典无法存储重复键,测试数据结构不符合需求
内容的提问来源于stack exchange,提问作者pouchewar
相关产品推荐
相关产品推荐

