如何更改 Python 3.5 字典中键的顺序,使用另一个列表作为键的参考?

Beh*_*hti 5 python dictionary key

我正在尝试更改字典中“键”的顺序,但没有成功。这是我最初的字典:

Not_Ordered={
  'item':'book',
  'pages':200, 
  'weight':1.0, 
  'price':25, 
  'city':'London'
}
Run Code Online (Sandbox Code Playgroud)

我是否有机会根据键顺序列表更改顺序,如下所示:

key_order=['city', 'pages', 'item', 'weight', 'price']
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 我正在使用 Python 3.5.2。
  • 我不是在寻找对键进行排序。
  • 我知道 Python 3.6 跟随插入。
  • 另外,我知道 OrderedDict,但它给了我一个列表,但我正在寻找字典作为最终结果。

Cha*_* Ye 10

Python 3.5 中没有解决方案


对于 python >= 3.6,只需

Ordered_Dict = {k : Not_Ordered_Dict[k] for k in key_order}
Run Code Online (Sandbox Code Playgroud)


Tim*_*ers 7

从 3.7 开始,字典以插入顺序“正式”维护。它们在 3.6 中被如此订购,但在 3.7 之前无法保证。在 3.6 之前,您无法做任何事情来影响键出现的顺序。

但是OrderedDict可以代替使用。我不明白你的“但它给了我一个清单”的反对意见 - 我看不出这实际上是正确的。

你的例子:

>>> from collections import OrderedDict
>>> d = OrderedDict([('item', 'book'), ('pages', 200),
...                  ('weight', 1.0), ('price', 25),
...                  ('city', 'London')])
>>> d # keeps the insertion order
OrderedDict([('item', 'book'), ('pages', 200), ('weight', 1.0), ('price', 25), ('city', 'London')])
>>> key_order= ['city', 'pages', 'item', 'weight', 'price'] # the order you want
>>> for k in key_order: # a loop to force the order you want
...     d.move_to_end(k)
>>> d # which works fine
OrderedDict([('city', 'London'), ('pages', 200), ('item', 'book'), ('weight', 1.0), ('price', 25)])
Run Code Online (Sandbox Code Playgroud)

不要被输出格式所迷惑! d显示为对列表,传递给OrderedDict构造函数,为了清楚。 d本身不是一个列表。