我正在尝试根据字符在列表中显示的顺序对字典进行排序。
列表的第一个元素是字典的第一个元素。最后,字典键的顺序与提供的列表中的顺序相同......
我可以使用此代码按值排序
newlist = sorted(product_list, key=lambda k: k['product'])
但不能为列表
感谢您的帮助!
答案 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的替换。