如何根据列表集中的元素执行字典查询?

问题描述 投票:0回答:1

假设我有一个像[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

是否有任何算法可以为列表集的相同值生成相同的键?列表集可以包含字符串,并且不涉及重复。

谢谢你

python python-3.x dictionary set lookup
1个回答
3
投票

使用 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))

这两种方法都假定listsets内的所有值本身是可哈希的。否则,你将需要某种递归方法。

© www.soinside.com 2019 - 2024. All rights reserved.