值得使用只有键和空值的 Dict 吗?
It it worth to use a Dict with only keys and null values?
因此,在我的利基用例中,我想在 python 中创建一个哈希映射来存储大型列表数据集。这个列表有一个键值作为元组(即 (1,2)
),我的目标是搜索列表并查看元组是否存在。
我知道这是可以通过常规列表实现的,但我想要 O(1) 的时间复杂度和哈希映射功能。但是在向字典中添加元素时,我是这样做的:
dictionary[(1,2)] = None
因为我不太关心与键关联的值。
这是好的编码习惯还是我应该使用其他东西?
我建议使用 defaultdict
。默认情况下,任何不在字典中的值都是 False
.
from collections import defaultdict
lookup = defaultdict(bool)
lookup[(1,2)] = True
示例:
l = [(1,2), (3,4), (5,6)]
for e in l:
lookup[e] = True
print(lookup[(3,4)])
# True
print(lookup[(8, 9)])
# False
如果不在乎颜值折腾的话,可以用一套。来自 python 源代码(Objects/setobject.c 的第 4 行):
Derived from Lib/sets.py and Objects/dictobject.c.
如果你需要遍历一个集合,你应该使用列表或者根据需要进行转换。
因此,在我的利基用例中,我想在 python 中创建一个哈希映射来存储大型列表数据集。这个列表有一个键值作为元组(即 (1,2)
),我的目标是搜索列表并查看元组是否存在。
我知道这是可以通过常规列表实现的,但我想要 O(1) 的时间复杂度和哈希映射功能。但是在向字典中添加元素时,我是这样做的:
dictionary[(1,2)] = None
因为我不太关心与键关联的值。
这是好的编码习惯还是我应该使用其他东西?
我建议使用 defaultdict
。默认情况下,任何不在字典中的值都是 False
.
from collections import defaultdict
lookup = defaultdict(bool)
lookup[(1,2)] = True
示例:
l = [(1,2), (3,4), (5,6)]
for e in l:
lookup[e] = True
print(lookup[(3,4)])
# True
print(lookup[(8, 9)])
# False
如果不在乎颜值折腾的话,可以用一套。来自 python 源代码(Objects/setobject.c 的第 4 行):
Derived from Lib/sets.py and Objects/dictobject.c.
如果你需要遍历一个集合,你应该使用列表或者根据需要进行转换。