2

我想找到对应于一行中最大值的列号。

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

    {'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

4 回答 4

4

像这样的东西应该工作:

max(d['4'].iteritems(), key=lambda x: x[1])[0]
于 2013-01-03T15:51:06.143 回答
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
于 2013-01-03T16:03:24.323 回答
0

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

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

将其分解以查看其工作原理:

  • d['4'].items()返回键值元组的列表(或 python3 中的可迭代对象)
  • max接受第二个参数,这是一个用于实际比较项目的函数。在这种情况下,我们取每个元组中的第二项(值)
  • max返回整个元组,我们使用col,value = max(...)
于 2013-01-03T15:52:05.393 回答
0
In [11]: max(d['4'].items(), key=lambda (k,v):v)[0]
Out[11]: '2'

d你的字典在哪里。

于 2013-01-03T15:53:33.937 回答