按推入顺序存储Python字典条目

17 投票
6 回答
39792 浏览
提问于 2025-04-15 16:49

Python中的字典是没有特定顺序的,也就是说,字典里的内容是无序的。例如:

>>> myDict = {'first':'uno','second':'dos','third':'tres'}
myDict = {'first':'uno','second':'dos','third':'tres'}
>>> myDict
myDict
{'second': 'dos', 'third': 'tres', 'first': 'uno'}

虽然可以从字典中获取一个排序后的列表或元组,但我想知道是否可以让字典按照添加的顺序来存储这些项目。在之前的例子中,这意味着内部的顺序应该是 {'first':'uno','second':'dos','third':'tres'},而不会有其他的顺序。

我需要这样做是因为我用字典来存储从配置文件中读取的值;一旦读取并处理(这些值会被修改),我需要按照读取的顺序将它们写入一个新的配置文件(这个顺序既不是字母顺序,也不是数字顺序)。

有什么想法吗?

请注意,我并不是在寻找其他方法来获取顺序(比如使用列表),而是想知道有没有办法让字典本身就保持顺序(就像在即将发布的Python版本中那样)。

6 个回答

3

确实存在一些可以保持顺序的字典实现。

在Django中有一个这样的实现,叫做SortedDict,虽然名字有点让人困惑。这个实现应该可以在Python 2.3及以上的版本中使用。

4

用一个列表来保存键的顺序

34

试试 Python 2.7 及以上版本,可能 3.1 也可以用,有一个叫 OrderedDict 的东西。

http://www.python.org/

http://python.org/download/releases/2.7/

>>> from collections import OrderedDict
>>> d = OrderedDict([('first', 1), ('second', 2),
...                  ('third', 3)])
>>> d.items()
[('first', 1), ('second', 2), ('third', 3)]

PEP 372:在集合中添加有序字典

撰写回答