我想找到与行中最高值对应的列号。
我需要把它写成一个函数,它将以下字典作为参数:
{'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列。我希望我的函数返回这个数字。怎么样?
答案 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