按特定顺序(键列表)对字典进行排序

时间:2013-12-11 23:04:27

标签: python

我正在尝试根据字符在列表中显示的顺序对字典进行排序。

列表的第一个元素是字典的第一个元素。最后,字典键的顺序与提供的列表中的顺序相同......

我可以使用此代码按值排序

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

但不能为列表

感谢您的帮助!

3 个答案:

答案 0 :(得分: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)]

答案 1 :(得分: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)

new_dict = OrderedDict((k, old_dict[k]) for k in key_list if k in old_dict)

取决于您希望如何处理丢失的密钥。

答案 2 :(得分:0)

根据定义,字典是无序的。您可以使用OrderedDict中的collections作为http://docs.python.org/2/library/collections.html#collections.OrderedDict的替换。