在Python中对字典列表排序

8 投票
4 回答
737 浏览
提问于 2025-04-15 11:34

我有一个包含字典的Python列表:

mylist = [
{'id':0, 'weight':10, 'factor':1, 'meta':'ABC'},
{'id':1, 'weight':5, 'factor':1, 'meta':'ABC'},
{'id':2, 'weight':5, 'factor':2, 'meta':'ABC'},
{'id':3, 'weight':1, 'factor':1, 'meta':'ABC'}
]

我想知道,最有效率和最简洁的方式是什么,来按照“重量”和“因子”这两个数字来排序这个列表。排序后的列表应该是这样的:

mylist = [
{'id':3, 'weight':1, 'factor':1, 'meta':'ABC'},
{'id':1, 'weight':5, 'factor':1, 'meta':'ABC'},
{'id':2, 'weight':5, 'factor':2, 'meta':'ABC'},
{'id':0, 'weight':10, 'factor':1, 'meta':'ABC'},
]

4 个回答

1

我采纳了dF的回答作为灵感,但这是我最终为我的情况选择的方案:

@staticmethod
def ordered_list(mylist):
    def sort_func(d):
        return (d['weight'], d['factor'])

    mylist.sort(key=sort_func)
1

下面的内容应该可以解决你的问题:

def cmp_dict(x, y):
    weight_diff = y['weight'] - x['weight']
    if weight_diff == 0:
        return y['factor'] - x['factor']
    else:
        return weight_diff

myList.sort(cmp_dict)
23
mylist.sort(key=lambda d: (d['weight'], d['factor']))

或者

import operator
mylist.sort(key=operator.itemgetter('weight', 'factor'))

撰写回答