Нито dict.items()
, нито list()
гарантират каквото и да е подреждане. dict.items()
връща елементите на речника в "някакъв" ред - обикновено в реда, в който е най-лесно да бъде обходен речникът вътрешно. Как се обхожда речникът зависи изцяло от вътрешната му реализация - ако е с хеш-таблица (което е много вероятно) или някакъв друг вид подобна структура, вероятно най-лесният начин на обхождане ще мине през всички buckets на хеш-таблицата и ще върне елементите в реда, в който са се разположили из bucket-ите. Тогава всичко зависи от това каква хеш-функция се използва, за да определи кой елемент в кой bucket да попадне.
Е, така се е получило, че твоята реализация на Python използва хеш-функция и организация на хеш-таблица (или нещо друго, някакъв друг начин, по който е реализиран речникът), която слага малки числа в bucket-и, отговарящи на числото - и след това обхожда bucket-ите в този ред... може би. Тогава елементът с ключ 1 може да попадне в първи bucket, този с ключ 2 - във втори и т.н. - само че в един момент се оказва, че нямаме чак толкова много bucket-и и елементът с ключ 1000000 попада в някой друг. Може и изобщо да не е това - може да минава някакво хеширане или Ерис знае какво - в крайна сметка някак се оказва така, че използването на малки числа за ключове слага елементите в "горе-долу така подредени" bucket-и.
Но като цяло, на това изобщо и по никакъв начин не можеш да разчиташ - изрично навсякъде се казва, че dict.items()
ще върне елементите в неизвестно какъв ред, като единствената гаранция е, че dict.keys()
, dict.values()
и dict.items()
обхождат речника в един и същи ред (ако речникът не е бил променян междувременно).