自Python 3.7以来,字典根据插入保持顺序。
似乎你可以使用next(iter(my_dict))
获得字典中的第一个条目?
我的问题是关于大O操作的时间复杂性?
我可以把next(iter(my_dict))
看作一个恒定时间(O(1((运算吗?或者,在恒定时间内检索字典中第一个条目的最佳方法是什么?
我问这个问题的原因是,我希望将其用于编码面试,在面试中,我非常强调解决方案的时间复杂性,而不是它在毫秒内运行的速度。
这可能是最好的方法(实际上你现在得到了第一个键,next(iter(d.values()))
得到了你的值(。
此操作(至少对于组合表,通过keys
、values
或items
的任何迭代(通过包含字典条目的数组进行迭代:
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_value
是NULL
。
请注意,这是CPython特有的。我不知道Python的其他实现是如何实现这一点的。