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版本中)。
答案 0 :(得分:30)
尝试python 2.7及以上,可能是3.1,有OrderedDict
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)]
答案 1 :(得分:4)
使用列表来保存按键顺序
答案 2 :(得分:3)
保留订单词典的实现肯定存在。
有this one in Django,令人困惑地称为SortedDict
,可以使用Python> = 2.3 iirc。
答案 3 :(得分:2)
Python中的字典被实现为哈希表,这就是订单随机出现的原因。您可以实现自己的dict变体,但是你会失去方便的语法。相反,也要跟踪密钥的顺序。
初始化:
keys = []
myDict = {}
阅读时:
myDict[key] = value
keys.append(key)
写作时:
for key in keys:
print key, myDict[key]
答案 4 :(得分:2)
而不是解释理论部分我将给出一个简单的例子。
>>> from collections import OrderedDict
>>> my_dictionary=OrderedDict()
>>> my_dictionary['foo']=3
>>> my_dictionar['aol']=1
>>> my_dictionary
OrderedDict([('foo', 3), ('aol', 1)])
答案 5 :(得分:-2)
答案非常简短.. 这样做 -
<强> dictCopy = yourdictname.copy()强>
然后使用dictCopy,它将以相同的顺序。