相关疑难解决方法(0)

字典:如何保持键/值与声明的顺序相同?

我有一个字典,我按特定顺序声明,并希望始终保持该顺序.键/值不能根据它们的值按顺序保存,我只是按照我声明的顺序想要它.

所以,如果我有字典:

d = {'ac': 33, 'gw': 20, 'ap': 102, 'za': 321, 'bs': 10}
Run Code Online (Sandbox Code Playgroud)

如果我查看它或迭代它,它是不是按顺序,有没有办法确保Python将保持我声明键/值的显式顺序?

python sorting dictionary

292
推荐指数
8
解决办法
30万
查看次数

为什么字典排序是非确定性的?

我最近从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)

......?

python dictionary non-deterministic python-3.x python-3.3

37
推荐指数
2
解决办法
7794
查看次数

字典中的键顺序

我有一本字典

{'a': 'first', 'b': 'second'}
Run Code Online (Sandbox Code Playgroud)

但是,我需要不同顺序的字典:

{'b': 'second', 'a': 'first'}
Run Code Online (Sandbox Code Playgroud)

做这个的最好方式是什么?

python dictionary

28
推荐指数
2
解决办法
2万
查看次数