2016-04-07 20 views
0

私はキーとして名前を、値としてスコアを含むリストを持っています。Pythonソート値リスト、値で並べ替え

私は値のリストをソートしようとしており、その値で辞書全体をソートしようとしています。それは最高のスコアでソートされています。ここで

辞書です:

{'Dave_Wright': [10], 'Clara_Johnson': [9, 7], 'Amy_Kukri': [9, 8, 9], 'Eden_Jia': [10]} 

私はI'vはstackoverflowの他の場所から見つかったコードを使用しようとしているが、私はまだこれに固有の問題を発見していませんでした。

print(d2) 
d2 = sorted(d2.items(), key = itemgetter(1)) 
for key in d2: 
    print(key, d2[key]) 

私はおそらくこれで丘陵地帯から山を作っていますが、私は本当に困っています。

+2

期待どおりの出力を投稿してください。 – JRodDynamite

+0

'itemgetter'とは何ですか? – Finwood

+0

@Finwood:['operator.itemgetter'](https://docs.python.org/3/library/operator.html#operator.itemgetter) – zondo

答えて

0

ちょうどitemgetter(1)はソートを行いません。

def get_return(key_value): 
    return list(sorted(key_value[1])), key_value[0] 

d2 = sorted(d2.items(), key=get_return, reverse=True) 

for key, value in d2: 
    print(key, value) 

Hereは、指定した順序で辞書を出力しますspectre-d

+0

ありがとう多く!これは本当に役に立ちます。 –

0

これにより推奨されたキー/値で辞書をソートするために役立つチュートリアルです:あなたはこのために、独自のキーを作成する必要があります(あなたが最初に、最も高いスコアを意味することを仮定して):

d = {'Dave_Wright': [10], 'Clara_Johnson': [9, 7], 'Amy_Kukri': [9, 8, 9], 'Eden_Jia': [10]} 

print ('\n'.join(
    '{}, {}'.format(key, sorted(value, reverse=True)) 
    for key, value in sorted(d.items(), key=lambda x:x[1], reverse=True))) 

結果:

Dave_Wright, [10] 
Eden_Jia, [10] 
Amy_Kukri, [9, 9, 8] 
Clara_Johnson, [9, 7] 
0

通常、辞書はソート可能ではありません。辞書内のキーと値のペアを並べ替えることはできますが、

for name, scores in sorted(d2.items(), key=lambda x: max(x[1]), reverse=True): 
    print name, sorted(scores) # reverse=True? 
0
for l in d.values(): 
    l.sort(reverse=True) # this will sort the values in place(mutate the dict) 
result = sorted(d.items(), key=lambda x: x[1], reverse=True) 
Out[518]: 
[('Eden_Jia', [10]), 
('Dave_Wright', [10]), 
('Amy_Kukri', [9, 9, 8]), 
('Clara_Johnson', [9, 7])] 

これは、あなたが期待される出力ですか?