python中字典的多因素排序

时间:2015-08-28 12:39:55

标签: python sorting dictionary

我有两个字典,两个都有相同的索引,但值不同。我想要的是按值排序的第一个字典的键列表。如果存在平局,则应优先选择第二个字典中具有较高值的​​条目。在两个词典中,值越高越好

示例:

node_degree = {1: 4, 2: 5, 3: 2, 4: 4, 5: 2}
node_volumes = {1: 100, 2: 200, 3: 300, 4: 400, 5: 500}

我可以按以下方式对node_degree字典进行排序:

degree_list = sorted(node_degree, key=node_degree.get, reverse=True)

将产生[2, 1, 4, 3, 5]。然而,条目1和4具有相同的值(4),并且在第二列表node_volumes中,节点1(100)的值低于节点4(400)的值。对于节点3和5也是如此。因此实际上应该是:

sortFunction(node_degree, node_volumes) = [2, 4, 1, 5, 3]

如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

这基于第一和第二个词组中的值的元组进行排序:

degree_list = sorted(
    node_degree,
    key=lambda k: (node_degree[k], node_volumes[k]),
    reverse=True,
)