3

さまざまな文字列(単語)の3つの数値(重み、カウント、貢献度)があり、それらを1つの多次元配列に編成してから、並べ替えます。これを行うために、辞書内にリストを作成しました。リストには数値が含まれ、文字列がキーになります。

print_dictionary[word] = [weight,count,contribution]

最初に昇順で、次に降順で「貢献度」(リストの3番目の値)で並べ替え、並べ替えられたリストの最初の10項目を表示するにはどうすればよいですか。これどうやってするの?

たとえば、次のprint_dictionaryの場合:

print_dictionary[sam] = [2,7,1]
print_dictionary[sun] = [4,1,3]
print_dictionary[dog] = [1,3,2]

私は彼らが貢献を昇順でソートできるようにしたいと思います:

Word:   Weight:   Count:    Contribution:
sam     2         7         1
dog     1         3         2
sun     4         1         3

itemegetterをこれに使用する方法がわかりません。

sorted(print_dictionary, key=itemgetter(2))
4

2 に答える 2

4

にキーとして無名関数を渡すことができますsorted。これは、多次元dictの3番目のメンバーをキーとして使用します。

>>> d = {'a': [1, 4, 7], 'b': [2, 3, 9], 'c': [3, 2, 8]}
>>> for key in sorted(d, key=lambda x: d[x][2]):
...    print key, d[key]
a [1, 4, 7]
c [3, 2, 8]
b [2, 3, 9]

降順の場合は、を使用しますreverse=True。結果を制限するには、以下を追加し[:N]ます。

sorted(d, key=lambda x: d[x][2], reverse=True)[:2]

# b [2, 3, 9]
# c [3, 2, 8]

sortedPythonの詳細と並べ替え。

于 2012-05-27T03:17:31.787 に答える
1

辞書を実際に並べ替えることはできません。試してみると、実際には辞書からキーのリストを並べ替えているだけです。これは、値の3番目の項目を調べるカスタムの並べ替え比較を使用して行うことができます。

sorted(print_dictionary, key=lambda word: print_dictionary[word][2])

したがって、レポートを生成するには、次のようなものが機能します。

sorted_keys = sorted(print_dictionary, key=lambda word: print_dictionary[word][2])

print "Word:\tWeight:\tCount:\tContribution"      
for i in range(10): # or however many you want
    word = sorted_keys[i]
    values = print_dictionary[word]
    print "\t".join([word]+[str(n) for n in values])
于 2012-05-27T03:17:22.187 に答える