Всегда ли python dict.items() возвращает один и тот же порядок?

Гарантируется ли, что встроенные методы python 2.X dict.items() а также dict.iteritems() всегда будет возвращать товары в том же порядке? Или эти методы недетерминированы?

2 ответа

В пределах одного запуска программы, и при условии d не мутирует между ними, то

d.items()
d.iteritems()
d.keys()
d.iterkeys()
d.values()
d.itervalues()

все согласуются с каждым, и каждый возвращает одну и ту же последовательность каждый раз.

Но если вы измените диктовку, она может уменьшаться или расти и перестраиваться внутри, что может изменить порядок. Который затем останется прежним до следующей мутации.

РЕДАКТИРОВАТЬ: одно исключение, которое является вполне преднамеренным. Если вы просто замените значение, связанное с существующим ключом, порядок не изменится. Так что если k in d является True, d[k] = v безвреден Все ставки отключены, если вы добавляете новый ключ или удаляете ключ.

Если вам интересно, вы можете использовать Visual Code и добавлять точки останова в каждой интересующей вас точке и отслеживать локальные переменные на предмет различий между запусками кода... будь то один и тот же поток программы или отдельный запуск. Вы также можете добавить часы выражения. Это позволит вам убедиться в поведении словарных методов, включая dict.items() и dict.iteritems().

Вам нужно настроить функцию так:

d = {'a': 4, 'c': 1, 'b': 2, 'd': 3}
def sorteddict(d={}):
    return sorted(d.items(),key=lambda x: x[1])
print(sorteddict(d))
Другие вопросы по тегам