如果我们需要插入一个键,那么只有当键不存在时才在字典中输入值。 所以在C++中,我们写得像
auto it = my_dictionary.insert( std::make_pair( key , value ) );
稍后我们可以使用迭代器进行进一步的比较,比如
if ( it->second < something ) { /* do something */ }
如果我们必须在Python中实现同样的功能,我们会喜欢。。你知道吗
if key not in my_dictionary:
my_dictionary[key] = value
每次比较或赋值都要进行查找。我们在上面的代码段中执行两个搜索。我们如何优化这个??你知道吗
Python字典的工作方式类似于哈希表。你所做的每一次查找都是大致恒定的时间。在这种情况下,不必担心性能。你知道吗
如果您真的想保存一种迭代器到您的字典,您可以使用字典和列表。字典中的每个键都有一个列表元素的索引,这是一个包含单个元素的示例:
我们使用字典和列表得到相应的键值:
如果你问的是这样的问题:
现在您只进行一个字典访问,另一个是列表索引。你知道吗
告诉你这不值得担心。我计算了使用字典1时间和数组n时间与使用字典n时间之间的时间差。这些是使用
timeit
对一个有40000个键的字典的结果:如果您需要使用同一个键100次,您将获得大约17%的性能提升!注意,如果只使用一次dictionary,那么解决方案(array+dictionary)实际上会比预期的差一些。对于您介绍的案例(n=2),您的性能增益仅为8%。你知道吗
记住,Python不是C或C++。如果这是一个实际的性能问题,那么就不应该使用Python。你知道吗
使用setdefault:
经过大量的谷歌搜索和讨论,我意识到这是语言设计的问题。无法存储对成功搜索的引用以供将来使用(即,我不能保存迭代器或类似的东西)。你知道吗
如果你需要一本大字典,他应该选择C++。你知道吗相关问题 更多 >
编程相关推荐