Всегда ли 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))