1

私はそのような辞書を持っています:

d = {11:{'a':2.1, 'b':2.2,'c':3.0},
     12:{'b':4.5,'g':1.2},
     4:{'g':5.6,'a':4.5,'f':0.5,'r':1.3}
}

私が取得したいのは:

 [(4,'g'),(4,'a'),(12,'b'),(11,'c'),(11,'b'),(11,'a'),(4,'r'),(12,'g'),(4,'f')]

だから私がやりたいのは、値の降順でソートし、この順序を実現する辞書キーを取得することです。

何か使いkey = lambda x, y: d[x][y]たいのですが、欲しいリストを返す方法がわかりません。

4

1 に答える 1

2

これはそれを行う必要があります:

sorted(((k1, k2) for k1 in d for k2 in d[k1]), key=lambda t: d[t[0]][t[1]], reverse=True)

ジェネレータ式は、最初に値へのすべての主要な「パス」をリストし、次に値に基づいてそれらを逆にソートします。

デモ:

>>> sorted(((k1, k2) for k1 in d for k2 in d[k1]), key=lambda t: d[t[0]][t[1]], reverse=True)
[(4, 'g'), (4, 'a'), (12, 'b'), (11, 'c'), (11, 'b'), (11, 'a'), (4, 'r'), (12, 'g'), (4, 'f')]
于 2013-03-25T12:54:46.270 に答える