python';s dict.items()是否总是返回相同的顺序?

python';s dict.items()是否总是返回相同的顺序?,python,dictionary,python-2.x,python-internals,iteritems,Python,Dictionary,Python 2.x,Python Internals,Iteritems,Python2.X的内置方法dict.items()和dict.iteritems()是否保证总是以相同的顺序返回项目?或者这些方法是不确定的?在一个程序的一次运行中,如果dictd没有在其间变异,那么 d.items() d.iteritems() d.keys() d.iterkeys() d.values() d.itervalues() 都是一致的,每次都返回相同的序列 但是如果你修改dict,它可能会收缩或增长,并在内部重新排列,这可能会改变顺序。在下一次突变之前,它将保持不变 编辑

Python2.X的内置方法
dict.items()
dict.iteritems()
是否保证总是以相同的顺序返回项目?或者这些方法是不确定的?

在一个程序的一次运行中,如果dict
d
没有在其间变异,那么

d.items()
d.iteritems()
d.keys()
d.iterkeys()
d.values()
d.itervalues()
都是一致的,每次都返回相同的序列

但是如果你修改dict,它可能会收缩或增长,并在内部重新排列,这可能会改变顺序。在下一次突变之前,它将保持不变


编辑:一个例外,这是经过深思熟虑的。如果仅替换与现有键关联的值,则顺序不会更改。因此,如果d中的
k
True
d[k]=v
是无害的。但是,如果您添加新密钥或删除密钥,则所有赌注均无效。

您需要这样的自定义功能:

d = {'a': 4, 'c': 1, 'b': 2, 'd': 3}
def sorteddict(d={}):
    return sorted(d.items(),key=lambda x: x[1])
print(sorteddict(d))

如果您感兴趣,您可以使用可视化代码,在您感兴趣的每个点添加断点,并监视局部变量在代码运行期间的差异。。。无论是通过相同的程序流还是通过单独的运行。您还可以添加表达式手表。这将允许您自己确认dictionary方法的行为,包括dict.items()和dict.iteritems()

相关: