我有一个字典,我按特定顺序声明,并希望始终保持该顺序.键/值不能根据它们的值按顺序保存,我只是按照我声明的顺序想要它.
所以,如果我有字典:
d = {'ac': 33, 'gw': 20, 'ap': 102, 'za': 321, 'bs': 10}
Run Code Online (Sandbox Code Playgroud)
如果我查看它或迭代它,它是不是按顺序,有没有办法确保Python将保持我声明键/值的显式顺序?
我最近从Python 2.7切换到Python 3.3,似乎在Python 2中,字典键的排序是任意的但是一致的,在Python 3中,用例如获得的字典的键的排序vars()看起来是非确定性的.
如果我跑:
class Test(object): pass
parameters = vars(Test)
print(list(parameters.keys()))
Run Code Online (Sandbox Code Playgroud)
在Python 2.7和Python 3.3中,然后:
Python 2.7一直给我
['__dict__', '__module__', '__weakref__', '__doc__']
Run Code Online (Sandbox Code Playgroud)使用Python 3.3,我可以得到任何随机顺序 - 例如:
['__weakref__', '__module__', '__qualname__', '__doc__', '__dict__']
['__doc__', '__dict__', '__qualname__', '__module__', '__weakref__']
['__dict__', '__module__', '__qualname__', '__weakref__', '__doc__']
['__weakref__', '__doc__', '__qualname__', '__dict__', '__module__']
Run Code Online (Sandbox Code Playgroud)这种非决定论来自哪里?为什么会这样
list({str(i): i for i in range(10)}.keys())
Run Code Online (Sandbox Code Playgroud)
......在跑步之间保持一致,总是给予
['3', '2', '1', '0', '7', '6', '5', '4', '9', '8']
Run Code Online (Sandbox Code Playgroud)
......?
我有一本字典
{'a': 'first', 'b': 'second'}
Run Code Online (Sandbox Code Playgroud)
但是,我需要不同顺序的字典:
{'b': 'second', 'a': 'first'}
Run Code Online (Sandbox Code Playgroud)
做这个的最好方式是什么?