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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据列表集中的元素执行字典查询?相关的知识,希望对你有一定的参考价值。

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

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

谢谢你

答案

使用 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内的所有值本身是可哈希的。否则,你将需要某种递归方法。

以上是关于如何根据列表集中的元素执行字典查询?的主要内容,如果未能解决你的问题,请参考以下文章

Python代码阅读(第40篇):通过两个列表生成字典

Django:更新查询集中对象的顺序属性

Python列表元素为字典时,如何根据其中某个相同的键值进行元素合并

如何根据查询集中的值为对象分配排名

如何使用字典查找替换列表中的元素

根据字典映射表替换列表中的元素