查找相应的列号为最大值

时间:2013-01-03 15:48:54

标签: python

我想找到与行中最高值对应的列号。

我需要把它写成一个函数,它将以下字典作为参数:

    {'1': {'3': 0, '2': 1, '5': 1, '4': 0, '6': 29},
    '3': {'1': 0, '2': 0, '5': 0, '4': 1, '6': 1},
    '2': {'1': 13, '3': 1, '5': 21, '4': 0, '6': 0},
    '5': {'1': 39, '3': 0, '2': 1, '4': 0, '6': 14},
    '4': {'1': 1, '3': 1, '2': 17, '5': 2, '6': 0},
    '6': {'1': 0, '3': 43, '2': 0, '5': 0, '4': 1}}

我的第一行是第4行。我找到了最高的数字:

max(d['4'].values())

从字典的矩阵表示中我知道这个数字在第2列。我希望我的函数返回这个数字。怎么样?

4 个答案:

答案 0 :(得分:4)

这样的事情应该有效:

max(d['4'].iteritems(), key=lambda x: x[1])[0]

答案 1 :(得分:0)

我想你想要一个字典的items方法:

col,value = max(d['4'].items(), key = lambda x: x[1])

将其分解以了解其工作原理:

  • d['4'].items()返回键值元组的列表(或python3中的可迭代对象)
  • max接受第二个参数,该参数是用于实际比较项目的函数。在这种情况下,我们采用每个元组中的第二项(值)
  • max返回整个元组,我们使用col,value = max(...)
  • 对其进行反汇编

答案 2 :(得分:0)

In [11]: max(d['4'].items(), key=lambda (k,v):v)[0]
Out[11]: '2'

其中d是你的字典。

答案 3 :(得分:0)

代码:

def key_of_max_value(d):
    for k, v in d.iteritems():
        yield k, max((v, k) for k, v in v.iteritems())

测试代码:

def test_key_of_max_value():
    d = {
        '1': {'3': 0, '2': 1, '5': 1, '4': 0, '6': 29},
        '3': {'1': 0, '2': 0, '5': 0, '4': 1, '6': 1},
        '2': {'1': 13, '3': 1, '5': 21, '4': 0, '6': 0},
        '5': {'1': 39, '3': 0, '2': 1, '4': 0, '6': 14},
        '4': {'1': 1, '3': 1, '2': 17, '5': 2, '6': 0},
        '6': {'1': 0, '3': 43, '2': 0, '5': 0, '4': 1}
    }
    for k, (value, column_key) in key_of_max_value(d):
        print k, column_key, value    

test_key_of_max_value()

结果:

1 6 29
3 6 1
2 5 21
5 1 39
4 2 17
6 3 43