2013-12-11 231 views
0

我想根據其鍵在列表中出現的順序對字典排序。按特定順序排序字典(鍵列表)

列表的第一個元素將是字典的第一個元素。在結束的字典鍵wiould可以以相同的順序在所提供的列表...

我可以值這個代碼

newlist = sorted(product_list, key=lambda k: k['product']) 

進行排序,但不能做一個列表

謝謝你的幫助!

+4

您無法對字典進行排序。但是,您可以從'collections'模塊創建一個新的'OrderedDict' – wim

+0

@wim是正確的。如果要按特定順序對鍵和/或值進行操作,可以通過在'dict.keys()'上調用'sorted'來循環其鍵的排序列表。 – itsjeyd

回答

2

在Python(和大多數語言)dictionaries are unsorted,所以你不能「排序」字典。

您可以檢索和按鍵進行排序,並通過這些迭代:

for key in sorted(product_list.keys()): 
    item = product_list[key] 
    item.doSomething() 

或者你可以使用一個OrderDict,像這樣:

from collections import OrderedDict 

,然後生成字典中所要求的順序(這取決於你自己決定),但下面我們用鍵分類:

product_list = OrderDict(sorted(product_list.items(), key=lambda k: k[0])) 

作爲參考,Dict.items()返回元組的形式列表:

[(key1, value1), (key2, value2) , ... , (keyN, valueN)] 
2
from collections import OrderedDict 
new_dict = OrderedDict((k, old_dict[k]) for k in key_list) 

說了這麼多,可能有更好的方法來解決你的問題不是使用OrderedDict

如果某些項丟失,你需要使用的

new_dict = OrderedDict((k, old_dict.get(k)) for k in key_list) 

一個

取決於你想如何處理丟失的鍵。