在列表中排序字典

时间:2015-07-20 00:52:51

标签: python

我将字典逐个插入列表。最后,我按字典的两个值对列表进行排序。有没有一种方法可以在插入新字典时进行排序而不是在最后进行排序?是否有一个内置包或方法可以让我这样做,所以每个新词典都放在正确的位置?

1 个答案:

答案 0 :(得分:0)

您可以使用heapq模块,该模块包含优先级队列实现(在插入新项目时保留有序列表)。该模块的问题在于,它不允许您提供插入数据的比较功能。我们可以通过向heapq.heappush元组提供第一个和第二个键以及我们想要存储的字典来克服这个限制:

def make_tup(d):
    return (d['keyA'], d['keyB'], d)

使用示例:

# Create tuples and add it to the heap queue
ls = []
heapq.heappush(ls, make_tup(dict(keyA=10, keyB=5, c=20)))
heapq.heappush(ls, make_tup(dict(keyA=5, keyB=13, c=5)))
# Iterate over sorted items
for key_a, key_b, value in ls:
    print value