我有一个有序的字典,想要改变个别订单。在下面的代码示例中,我希望项目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
编辑:您可以编写自定义函数(警告,这可以工作,但非常快速和脏):
编辑:修复了当您尝试前进时发生的错误
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
OrderedDicts
由insertion order订购。因此,您必须通过循环原始对象中的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]
或者更有说服力
OrderedDict((k, queue[k]) for k in key_order)
我想你必须手动完成它:
>>> keys = list(queue)
>>> keys
['animals', 'food', 'people', 'drinks']
>>> keys[1], keys[2] = keys[2], keys[1]
>>> queue = collections.OrderedDict((key, queue[key]) for key in keys)
>>> list(queue)
['animals', 'people', 'food', 'drinks']
我不认为你可以像你希望的那样对字典进行排序而不明确重新定义顺序。