在python中改变有序字典的顺序

spe*_*zor 12 python collections ordereddictionary

我有一个有序的字典,想要改变个别订单.在下面的代码示例中,我希望项目3(人员)及其值移动到位置2.因此,顺序将是动物,人,食物,饮料.我怎么去他的?

import collections

queue = collections.OrderedDict()

queue["animals"] = ["cat", "dog", "fish"]
queue["food"] = ["cake", "cheese", "bread"]
queue["people"] = ["john", "henry", "mike"]
queue["drinks"] = ["water", "coke", "juice"]

print queue
Run Code Online (Sandbox Code Playgroud)

dan*_*som 13

OrderedDicts订单排序.因此,您必须通过循环key:value原始对象中的对来构造新的OrderedDict .没有OrderedDict方法可以帮助你.

所以你可以创建一个tuple来表示它的思想顺序keys,然后迭代它来创建一个新的OrderedDict.

key_order = ('animal', 'people', 'food', 'drink')
new_queue = OrderedDict()
for k in key_order:
    new_queue[k] = queue[k]
Run Code Online (Sandbox Code Playgroud)

或者更有说服力

OrderedDict((k, queue[k]) for k in key_order)
Run Code Online (Sandbox Code Playgroud)


Sel*_*cuk 5

编辑:您可以编写一个自定义函数(警告,此方法有效,但非常快速又肮脏):

编辑:修复了当您尝试向前移动时发生的错误

import collections

def move_element(odict, thekey, newpos):
    odict[thekey] = odict.pop(thekey)
    i = 0
    for key, value in odict.items():
        if key != thekey and i >= newpos:
            odict[key] = odict.pop(key)
        i += 1
    return odict

queue = collections.OrderedDict()

queue["animals"] = ["cat", "dog", "fish"]
queue["food"] = ["cake", "cheese", "bread"]
queue["people"] = ["john", "henry", "mike"]
queue["drinks"] = ["water", "coke", "juice"]
queue["cars"] = ["astra", "focus", "fiesta"]

print queue

queue = move_element(queue, "people", 1)

print queue
Run Code Online (Sandbox Code Playgroud)