Python 对字典 列表的多维度的排序
- 对字典进行排序
1 2 3 4 5 6 |
>>> phone_book = {"Linda": "7750", "Bob": "9345", "Carol": "5834"} >>> from operator import itemgetter >>> sorted_pb = sorted(phone_book.items(), key=itemgetter(1)) >>> print(sorted_pb) [('Carol', '5834'), ('Linda', '7750'), ('Bob', '9345')] |
- 多维 list 排序:实际情况下也会碰到需要对多个字段进行排序的情况,这在 DB 里面用 SQL 语句很容易做到,但使用多维列表联合
sorted()
函数也可以轻易达到。
1 2 3 4 5 |
>>> import operator >>> game_result = [["Bob",95,"A"],["Alan",86,"C"],["Mandy",82.5,"A"],["Rob",86,"E"]] >>> sorted(game_result,key=operator.itemgetter(2, 1)) [['Mandy', 82.5, 'A'], ['Bob', 95, 'A'], ['Alan', 86, 'C'], ['Rob', 86, 'E']] |
- 字典中混合 list 排序:如果字典中的 key 或者值为列表,需要对列表中的某一个位置的元素排序也是可以做到的。
12345>>> my_dict = {"Li":["M",7],"Zhang":["E",2],"Wang":["P",3],"Du":["C",2],"Ma":["C",9],"Zhe":["H",7]}>>> import operator>>> sorted(my_dict.items(),key=lambda item:operator.itemgetter(1)(item[1]))[('Du', ['C', 2]), ('Zhang', ['E', 2]), ('Wang', ['P', 3]), ('Zhe', ['H', 7]), ('Li', ['M', 7]), ('Ma', ['C', 9])]
- List 中混合字典排序:如果列表中的每一个元素为字典形式,需要针对字典的多个 key 值进行排序也不难实现。
12345>>> import operator>>> game_result = [{"name":"Bob","wins":10,"losses":3,"rating":75},{"name":"David","wins":3,"losses":5,"rating":57},{"name":"Carol","wins":4,"losses":5,"rating":57},{"name":"Patty","wins":9,"losses":3,"rating":71.48}]>>> sorted(game_result,key=operator.itemgetter("rating","name"))[{'losses': 5, 'name': 'Carol', 'rating': 57, 'wins': 4}, {'losses': 5, 'name': 'David', 'rating': 57, 'wins': 3}, {'losses': 3, 'name': 'Patty', 'rating': 71.48, 'wins': 9}, {'losses': 3, 'name': 'Bob', 'rating': 75, 'wins': 10}]
itemgetter 用法

