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

私はあなたがitems辞書の方法が欲しいと思います:

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

これがどのように機能するかを確認するために分解します。

  • d['4'].items()Key-Valueタプルのリスト(またはpython3では反復可能なオブジェクト)を返します
  • max実際にアイテムを比較するために使用される関数である2番目の引数を取ります。この場合、各タプルの2番目の項目(値)を取得します
  • 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 に答える
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 に答える