我需要在字典中提取具有最高值的所有键。以下是字典的示例:
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。
编辑:
回应评论中的问题:
答案 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)