在嵌套字典中提取具有最高值的键

时间:2015-09-25 13:19:15

标签: python dictionary max

我需要在字典中提取具有最高值的所有键。以下是字典的示例:

a = {0: {0: 13, 1: 2, 2: 5, 3: 9}, 1: {0: 2, 1: 5, 2: 1, 3: 12}, 2: {0: 1.6, 1: 4, 2: 2, 3: 11}}

最高值为12(因为[0] [0] = 13具有相同的键,见下文),因此我需要一个键的元组来导致这个值。在这个例子中:

find_highest_value(a) = (1, 3)

我知道如何在非嵌套环境中找到具有最大值的密钥:

max(c, key=lambda x: c[x])

此外,我可以使用固定值访问第二个字典:

max(c, key=lambda x: c[x][0])
返回1的

(作为[1] [0]最高)。以下代码不起作用,此时我放弃了,因为我没有进一步的想法。

max(c, key=lambda (x,y): c[x][y])

其他问题:如何忽略两个键相等的值?即忽略所有值a [b] [c],b == c。

编辑:

回应评论中的问题:

  • 我需要完整字典中最高值的键。
  • 它总是像示例一样嵌套。一个词典字典,后者总是包含键值对。将其视为图中的邻接矩阵。

3 个答案:

答案 0 :(得分:2)

max([(x,y,a[x][y]) for x in a for y in a[x] if x != y], key=lambda x: x[2])

给出输出

(1, 3, 12)

并将根据需要忽略重复

答案 1 :(得分:2)

>>> max((key1, key2, value)
...     for key1, subvalues in a.items()
...     for key2, value in subvalues.items(),
...     key=lambda (key1, key2, value): value)
(1, 3, 12)

有许多方法可以获得钥匙。我们可以给出答案:

>>> (1, 3, 12)[:2]
(1, 3)

或仅生成密钥:

>>> max((key1, key2)
...     for key1, subvalues in a.items()
...     for key2 in subvalues,
...     key=lambda (key1, key2): a[key1][key2])
(1, 3)

由于必须执行两次字典查找,因此效率较低。

答案 2 :(得分:1)

print(max(((k2, max((k for k,v in d.items() if k != k2), key=d.get)) 
                for k2, d in a.items()),key=lambda x: a[x[0]][x[1]]))

输入:

a = {0: {0: 13, 1: 2, 2: 5, 3: 9}, 1: {0: 2, 1: 5, 2: 1, 3: 12}, 2: {0: 1.6, 1: 4, 2: 2, 3: 11}}

输出:

(1, 3)