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

Esc*_*alo 17 python sorting mapping dictionary

Python字典没有特定的顺序存储(映射没有顺序),例如

>>> myDict = {'first':'uno','second':'dos','third':'tres'}
myDict = {'first':'uno','second':'dos','third':'tres'}
>>> myDict
myDict
{'second': 'dos', 'third': 'tres', 'first': 'uno'}
Run Code Online (Sandbox Code Playgroud)

虽然可以从字典中检索已排序的列表或元组,但我想知道是否可以使字典按照它们传递给它的顺序存储项目,在前面的示例中,这将意味着将内部排序作为{'first':'uno','second':'dos','third':'tres'}和没有区别.

我需要这个,因为我正在使用字典存储值,因为我从配置文件中读取它们; 一旦读取和处理(值被更改),它们必须以与读取时相同的顺序写入新配置文件(此顺序不是字母顺序也不是数字顺序).

有什么想法吗?

请注意,我不是在寻找检索订单的次要方法(如列表),而是寻找使字典本身有序的方法(因为它将在即将推出的Python版本中).

YOU*_*YOU 31

尝试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)]
Run Code Online (Sandbox Code Playgroud)

PEP 372:向集合添加有序字典

  • 或者从这个补丁中获取OrderedDict的源代码:http://bugs.python.org/issue5397 (3认同)
  • 如果您查看PEP(http://www.python.org/dev/peps/pep-0372/),您将找到旧蟒蛇的有序词典的实现列表.如果性能不是问题,我建议使用他们自己的odict示例实现(http://dev.pocoo.org/hg/sandbox/raw-file/tip/odict.py),你将能够如果您升级,则交换标准库. (2认同)