2016-03-27 8 views
-1

私は名前の構造であり、その後、このようにスコアデータのリストを持っている:私はできるだけ簡単な方法で行うことが必要と何ソートリスト

['Danny', '8', 'John', '5', 'Sandra', 10] 

をソートですこのような例のための最高のスコアに最低によるデータ:

['John', '5', 'Danny', '8', 'Sandra', 10] 
+3

名前とスコアをタプルにまとめられているので、私は非常に '[( 'ダニー'、8)、( 'ジョン'、5)、( 'サンドラ'、10)のように、あなたのデータを構造化お勧めします] '。正確な結果を得るために、あなたの得点が文字列ではなく数字であることを確認してください。 – Kupiakos

+0

ユーザーとスコアの間のマッピングを作成する –

答えて

2

あなたは、あなたの人生がずっと楽になりますペアを作成する必要があります。

l = ['Danny', '8', 'John', '5', 'Sandra', '10'] 


it = iter(l) 


srt = sorted(zip(it, it), key=lambda x: int(x[1])) 
あなたを与えるだろう3210

[('John', '5'), ('Danny', '8'), ('Sandra', '10')] 

it = iter(l)あなたは形式(user, score)でタプルのペアを作成して、その後zip(it, it)は基本的に、我々一種である各タプルの第二の要素によって、(next(it), next(it))各反復を呼び出して、イテレータを作成しますスコア、intへのキャスト

intにキャストしてデータを使用することを計画しているsortifもあります。ソートされたデータからフラットなリストを作成することもできますが、それは悪い考えです。

0

問題の最適なデータ構造はDictionaryです。

あなたの状況では、名前とスコアの間にマッピングする必要があります。

dict = {'Danny':'8', 'John':'5', 'Sandra':'10'} 

sorted_dict = ((k, dict[k]) for k in sorted(dict, key=dict.get, reverse=False)) 

for k, v in genexp: 
...  k, v 

('John', '5') 
('Danny', '8') 
('Sandra', 10)