如何快速确定字典中是否包含以特定字符串开头的键?我们能否比线性更好?当我们只知道键的开头时,怎样才能实现O(1)操作?
以下是当前的解决方案:
for key in dict.keys():
if key.start_with(str):
return True
return False
如何快速确定字典中是否包含以特定字符串开头的键?我们能否比线性更好?当我们只知道键的开头时,怎样才能实现O(1)操作?
以下是当前的解决方案:
for key in dict.keys():
if key.start_with(str):
return True
return False
next((key for key in mydict if key.startswith(mystr)), None)
。请注意,这将在迭代字典键无特定顺序时返回第一个匹配项,并停止匹配。 - Mr. Llamafoo
,您将插入f
,fo
和foo
。您将拥有O(1)的查找,但是您将花费时间进行预处理(O(k),其中k是键长度),并浪费大量内存:
def insert_with_prefixes(key, value, dict_):
prefixes = (key[:i+1] for i in xrange(len(key)))
dict_.update((prefix, value) for prefix in prefixes)
对于日常使用,我会选择(并且我正在选择)arshajii答案中的方法。当然,要注意短前缀(这里是"h"
)可能会有多个冲突:
>>> a = {}
>>> insert_with_prefixes('hello', 'world', a)
>>> insert_with_prefixes('homo', 'sapiens', a)
>>> a
{'h': 'sapiens', 'hom': 'sapiens', 'homo': 'sapiens', 'ho': 'sapiens',
'hel': 'world', 'hell': 'world', 'hello': 'world', 'he': 'world'}
for key in dict_:
比for key in dict_.keys():
更快,因为后者会构建一个键列表。 - Chris Barkerdict.viewkeys()
。 - Jakub M.str
来在字典键中本地获取此行为... - 2rs2ts