【发布时间】:2020-04-30 16:56:03
【问题描述】:
我目前的以下代码工作正常:
有人可以帮我解决字典中有两个具有相同数字的键造成的冲突吗?
我尝试了多种方法(此处未列出)尝试创建一个数组来处理它,但我的方法仍然不成功。
我正在使用#python3.7
def find_key(dic1, n):
'''
Return the key '3' from the dict
below.
'''
d = {}
for x, y in dic1.items():
# swap keys and values
# and update the result to 'd'
d[y] = x
try:
if n in d:
return d[y]
except Exception as e:
return (e)
dic1 = {'james':2,'david':3}
# Case to test that return ‘collision’
# comment 'dic1' above and replace it by
# dic1 below to create a 'collision'
# dic1 = {'james':2,'david':3, 'sandra':3}
n = 3
print(find_key(dic1,n))
任何帮助将不胜感激。
【问题讨论】:
-
具有相同数据的两个键本身并不是真正的冲突......这根本不是 dicts 的工作方式。冲突是指两个不同键的哈希值相同。对 dict 进行线性循环对我来说也没有多大意义——你能澄清你想要实现的目标吗?谢谢!
-
问题的答案取决于发生碰撞时您想要做什么。是否要获取所有具有指定值的键?
-
这不是冲突,但是如果您进行反向查找字典,那将是冲突。或者,您可以让您的函数返回一个生成器,该生成器生成所有具有匹配值的键。
-
@KennyOstrom 是的,或者列表理解。并注意它们会产生碰撞,因为它们确实会创建反向字典...
-
find_key(dic1,n)应该返回什么?'david'、'sandra',是其中之一,还是两者都有?注意,在你的函数中创建一个反向字典来获取一个键是毫无意义的。
标签: python python-3.x dictionary hashtable collision