Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python“;“无价值”;词典_Python_Dictionary_Time Complexity - Fatal编程技术网

Python“;“无价值”;词典

Python“;“无价值”;词典,python,dictionary,time-complexity,Python,Dictionary,Time Complexity,我有一个问题,我想跟踪大量的值。如果我从未遇到该值,我将执行操作A,否则执行操作B。当然,我考虑使用字典跟踪这些值,因为查找速度很快,~O(1) 然而,字典是一个键值系统,而我想利用的只是键。 我可以指定一个伪值 "myvalue": None 但我忍不住想知道是否有更优雅的方式 想法?思想? 谢谢 这就是a的用途: 如果我坚持您的dict实现,我会: if value in dict: #Action B else: #Action A dict[value] = 1

我有一个问题,我想跟踪大量的值。如果我从未遇到该值,我将执行操作A,否则执行操作B。当然,我考虑使用字典跟踪这些值,因为查找速度很快,~O(1)

然而,字典是一个键值系统,而我想利用的只是键。 我可以指定一个伪值

"myvalue": None
但我忍不住想知道是否有更优雅的方式

想法?思想? 谢谢

这就是a的用途:


如果我坚持您的dict实现,我会:

if value in dict:
    #Action B
else:
    #Action A
    dict[value] = 1

这样,您就不必首先在dict中保存看不见的值。

最适合您的任务是

frozenset
类型是不可变和可散列的-其内容不能为 创建后进行更改;因此,它可以用作词典 键或作为另一组的元素


根据您的问题,这是最适合您在python中执行任务的集合形式。

那么为什么要将密钥添加到字典中呢?添加一个密钥-知道我遇到了它-太好了,这确实解决了两个问题。”“在集合中”是用哈希表实现的,对吗?因此,我可以期望得到~O(1)@Ruslan,它拥有与词典相同的性能保证。它甚至可以使用字典来实现。在Java、iirc中,它们的HashSet只是一个HashMap,它自动将键映射到
null
。为了方便起见,如果Python也这样做,我不会感到惊讶。@Carcigenicate语义上,set是一个具有
None
值的dict。这个实现可能更精简一些,因为它实际上不需要存储
None
s。我认为in-dict实现为O(n),对吗?所以我会尽量避免that@Ruslan中的
对于字典来说速度非常快。只有在进行大量哈希冲突时才能得到O(n)@Ruslan-See@Ruslan在Python 2中,dict.keys()
中的
if值应该是O(n),因为
keys
刚刚返回了一个列表,所以
list.\uu-contains\uu
应该被使用<代码>指令。包含的代码>为O(1)。在Python3中,dict.keys()
中的
值甚至是O(1),因为
keys
返回一个特殊的集合,比如object。我遇到一个新值时会做的一个操作是更新集合,所以我不确定不可变类型是否符合这里的条件。我没有具体说明我的“行动A”或“行动B”,所以很抱歉误解。很好,让人想起了冷冻食品though@Ruslan好吧,我很高兴,不过如果你觉得我的答案有用,你可以放弃它,以帮助未来的读者。
if value in dict:
    #Action B
else:
    #Action A
    dict[value] = 1
members = frozenset([keylist])
    if "mykey" in members: