Для OrderedDict
это присуще O(n)
, потому что порядок записан в связанном списке .
Для встроенного dict есть вектор (непрерывный массив), а несвязанный список, но в конце концов почти то же самое: вектор содержит несколько разновидностей «пустышек», специальные внутренние значения, которые означают, что «здесь еще не был сохранен ключ» или «ключ, который раньше здесь хранился, но небольше».Это делает, например, удаление ключа чрезвычайно дешевым (просто перезаписываете ключ фиктивным значением).
Но без добавления вспомогательных структур данных поверх этого, нет способа пропустить пустышки, не переходя их.один за раз.Поскольку Python использует форму открытой адресации для разрешения коллизий и поддерживает коэффициент загрузки ниже 2/3, по крайней мере треть записей вектора являются фиктивными.the_vector[i]
может быть получен через O(1)
время, но на самом деле не имеет предсказуемой связи с i-й не фиктивной записью.