字典会按相同顺序返回键和值吗?

8 投票
3 回答
4425 浏览
提问于 2025-04-15 12:20

可能重复的问题:
Python 字典:keys() 和 values() 的顺序总是一样的吗?

如果我在 Python 中有一个字典,调用 .keys 和 .values 会返回对应的元素,顺序会一样吗?

举个例子:

foo = {'foobar' : 1, 'foobar2' : 4, 'kittty' : 34743}

对于键,它返回:

>>> foo.keys()
['foobar2', 'foobar', 'kittty']

那么 foo.values() 会总是以和对应的键一样的顺序返回元素吗?

3 个回答

1

来自Python 2.6的文档:

字典里的键(key)和值(value)是以一种不随机的顺序列出的,这个顺序不是固定的,会根据不同的Python版本而变化,还和字典的插入和删除历史有关。如果在没有对字典进行任何修改的情况下调用 items()keys()values()iteritems()iterkeys()itervalues(),那么返回的列表会直接对应。这就允许我们使用 zip() 来创建(值,键)对,比如 pairs = zip(d.values(), d.keys())。对于 iterkeys()itervalues() 方法也是一样的关系:pairs = zip(d.itervalues(), d.iterkeys()) 也会得到相同的值对。另一种创建相同列表的方法是 pairs = [(v, k) for (k, v) in d.iteritems()]

我几乎可以肯定,Python 3.0 也会有相同的情况。

1

是的,它们会这样做。

你可以查看这个文档,地址是 Python文档

字典中的键和值是以一种不随机的顺序列出的,这个顺序在不同的Python版本中可能会有所不同,并且还和字典的插入和删除历史有关。如果在没有对字典进行任何修改的情况下调用items()、keys()、values()、iteritems()、iterkeys()和itervalues(),那么返回的列表将会直接对应。

最好的做法还是使用 dict.items()。

18

要提升对Python文档的理解其实挺难的:

字典里的键和值是以一种非随机的顺序列出的,这个顺序不是固定的,会根据不同的Python版本而变化,并且还和字典的插入和删除历史有关。如果在没有对字典进行任何修改的情况下调用items()keys()values()iteritems()iterkeys()itervalues(),那么得到的列表是直接对应的。这就允许我们使用zip()来创建(值, 键)的配对,比如pairs = zip(d.values(), d.keys())。同样的关系也适用于iterkeys()itervalues()方法:pairs = zip(d.itervalues(), d.iterkeys())也会得到相同的配对。还有一种创建相同列表的方法是pairs = [(v, k) for (k, v) in d.iteritems()]

所以,总的来说,答案是“是的”,但要注意,在调用keys()values()之间,不能对字典进行修改。

撰写回答