在Python 3.7+中查找字典中第一项的时间复杂性



自Python 3.7以来,字典根据插入保持顺序。

似乎你可以使用next(iter(my_dict))获得字典中的第一个条目?

我的问题是关于大O操作的时间复杂性?

我可以把next(iter(my_dict))看作一个恒定时间(O(1((运算吗?或者,在恒定时间内检索字典中第一个条目的最佳方法是什么?

我问这个问题的原因是,我希望将其用于编码面试,在面试中,我非常强调解决方案的时间复杂性,而不是它在毫秒内运行的速度。

这可能是最好的方法(实际上你现在得到了第一个键,next(iter(d.values()))得到了你的值(。

此操作(至少对于组合表,通过keysvaluesitems的任何迭代(通过包含字典条目的数组进行迭代:

PyDictKeyEntry *entry_ptr = &DK_ENTRIES(k)[i];
while (i < n && entry_ptr->me_value == NULL) {
entry_ptr++;
i++;
}

CCD_ 7保持每个相应密钥的值。

如果您的字典是新创建的,那么它会在第一次迭代中找到第一个插入的项(字典条目数组是仅追加的,因此保持顺序(。

如果你的字典被修改了(你删除了很多条目(,在更糟糕的情况下,这可能会导致O(N(找到第一个(在剩余条目中(插入的条目(其中N是原始条目的总数(。这是由于删除项目时字典没有调整大小,因此对于许多条目,entry_ptr->me_valueNULL

请注意,这是CPython特有的。我不知道Python的其他实现是如何实现这一点的。

最新更新