通常情况下,你可能需要对一个dictionaries的list,基于某个key排序。比如:
- >>> a = {"key1": 5 , "key2": 8, "key3": 2}
- >>> b = {"key1": 7 , "key2": 4, "key3": 9}
- >>> c = {"key1": 6 , "key2": 1, "key3": 1}
- >>> undecorated = [a, b, c]
该如何对这个list进行排序呢?
当然会有很多方法,最快的方法就是避免使用自定义的比较函数代替内建的比较函数,下面我们使用装饰-排序-反装饰模式进行排序:
- >>> sort_on = "key2"
- >>> decorated = [(dict_[sort_on], dict_) for dict_ in undecorated]
- >>> decorated
- [(8, {'key3': 2, 'key2': 8, 'key1': 5}), (4, {'key3': 9, 'key2': 4, 'key1': 7}), (1, {'key3': 1, 'key2': 1, 'key1': 6})]
- >>> decorated.sort()
- >>> decorated
- [(1, {'key3': 1, 'key2': 1, 'key1': 6}), (4, {'key3': 9, 'key2': 4, 'key1': 7}), (8, {'key3': 2, 'key2': 8, 'key1': 5})]
- >>> result = [dict_ for (key, dict_) in decorated]
- >>> result
- [{'key3': 1, 'key2': 1, 'key1': 6}, {'key3': 9, 'key2': 4, 'key1': 7}, {'key3': 2, 'key2': 8, 'key1': 5}]
- >>>
在Python2.4的list.sort()方法中,提供了key=argument,所以也可以如下比较:
- >>> import operator
- >>> result = sorted(undecorated,key=operator.itemgetter('key2'))