-10値

2012-04-24 8 views
1

に基づいて発見される独自の辞書のキーが値に基づいて、トップ10の辞書キーのを見つける必要があり....値が2つのフィールドの組..です-10値

{ Key : (value1, value2) } 

まずは、トップ10のvalue1に基づいてキーのリストを見つけなければなりません。次に、トップ10のvalue2に基づいてキーのリストを見つけなければなりません。

そして、我々はリスト1とリスト2のセットを見つけ、リストを返す必要が...

私たちはニシキヘビの方法でこれを行うことができますどのように...

または私は私が完全に記述する必要がありますこのようなものを行うためのロジック、...

私は一つの解決策を書いた:辞書はキーです :

dict(sorted(dict_mapping.iteritems(), key=lambda dict_mapping:dict_mapping[1]) [0:10]).keys() 

.....値のペアを助けてください..

+0

ラムダで1文字または2文字の長さのパラメータを使用すると、読みやすくなります。 – KurzedMetal

+1

「あなたはlist1とlist2のセットを見つけてリストを返さなければなりません...」ということを明確にすることはできますか? –

答えて

1

辞書値がタプルの場合、pythonのsorted()は辞書順ソートを行います。つまり、value1はソートに使用され、value2はタイブレークに使用されます。

sorted(a.keys(), key=a.get)[:10] 

この結果、上位10個のキーが辞書のキーではなく値でソートされます。

+0

こんにちは、私はあなたの解決策を見つけました。他の解決策は私に正しい出力を与えていない。ソートされたシーケンスをvalue1のみまたはvalue2のみで返すことは可能です....どちらも使用してはいけません......私は最初にリストに変換し、ソートされた関数を使用しました。 ....厳しいですが、dictのみの実装があります...リストメモリをもう一度使用しないでください.... – geek

1
sorted(data.keys(), key=lambda x: data[x][1])[:10] 
0
data = {'key1': ('value1', 'value2'), 'key2': ('value3', 'value4')} 

tmp = [sorted(data.keys(), key=lambda x: data[x][i])[:10] for i in (0, 1)] 
result = set(tmp[0]+tmp[1])