我想根據其鍵在列表中出現的順序對字典排序。按特定順序排序字典(鍵列表)
列表的第一個元素將是字典的第一個元素。在結束的字典鍵wiould可以以相同的順序在所提供的列表...
我可以值這個代碼
newlist = sorted(product_list, key=lambda k: k['product'])
進行排序,但不能做一個列表
謝謝你的幫助!
我想根據其鍵在列表中出現的順序對字典排序。按特定順序排序字典(鍵列表)
列表的第一個元素將是字典的第一個元素。在結束的字典鍵wiould可以以相同的順序在所提供的列表...
我可以值這個代碼
newlist = sorted(product_list, key=lambda k: k['product'])
進行排序,但不能做一個列表
謝謝你的幫助!
根據定義,字典是無序的。您可以使用OrderedDict
從collections
,如http://docs.python.org/2/library/collections.html#collections.OrderedDict所示,作爲直接替換。
在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)]
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)
或
一個取決於你想如何處理丟失的鍵。
您無法對字典進行排序。但是,您可以從'collections'模塊創建一個新的'OrderedDict' – wim
@wim是正確的。如果要按特定順序對鍵和/或值進行操作,可以通過在'dict.keys()'上調用'sorted'來循環其鍵的排序列表。 – itsjeyd