如何根据 list/set 中的元素执行字典查找?

How can I perform a dictionary lookup based on elements in a list/set?

假设我有一个值列表 [1, 2, 3, 4, 5] 并且我根据这些值生成了一些字典键所以如果我有另一个列表 [5, 4, 3, 2, 1 ] 它会生成相同的键,以便能够对相同的值执行字典查找。

a = [1, 2, 3, 4, 5]
key_1 = generate_key(a)

b = [5, 4, 3, 2, 1]
key_2 = generate_key(b)

dict = {...}
assert dict[key_1] == dict[key_2]
assert key_1 == key_2

是否有任何算法可以为 list/set 的相同值生成相同的密钥? list/set 可以包含字符串并且不涉及重复项。

谢谢

使用 frozenset 因为没有重复:

a = [1, 2, 3, 4, 5]
b = [5, 4, 3, 2, 1]

key_1 = frozenset(a)
key_2 = frozenset(b)

key_1 == key_2
# True
hash(key_1) == hash(key_2)
# True

如果有重复且出现的次数很重要,您可以使用 sorted tuple:

key_1 = tuple(sorted(a))
key_2 = tuple(sorted(b))

这两种方法都假定 lists/sets 中的所有值本身都是可哈希的。否则,您将需要某种递归方法。