2017-06-12 214 views
0

我只是在用python練習。我在形式的字典:按價值排序字典

my_dict = [{'word': 'aa', 'value': 2}, 
      {'word': 'aah', 'value': 6}, 
      {'word': 'aahed', 'value': 9}] 

我怎麼會去訂購這本詞典這樣的,如果我有十萬字的我然後能基於其數值排名,選擇前100?例如,只從上面的例子:

scrabble_rank = [{'word': 'aahed', 'rank': 1}, 
       {'word': 'aah', 'rank': 2}, 
       {'word': 'aa', 'rank': 3}] 

回答

4

首先,這不是一個字典;這是一個字典列表。這很好,因爲字典是無序的,但列表是有序的。

您可以使用它作爲一鍵排序功能排序的rank元素的值的列表:

scrabble_rank.sort(key=lambda x: x['value']) 
+0

嗯,這是一個相當酷 - 我會接受,但這種訂單「最差」到「最好」的價值 - 所以三個項目與值2,5,8,應該訂購8,5,2 - 從最高到最低... –

+1

我可以使用reverse = True作爲排序函數的參數之一。 –

+0

@MichaelRoberts使用'my_dict.sort(key = lambda x:-x ['value'])'這個伎倆 – jlandercy

1

這是你在找什麼:

scrabble_rank = [{'word':it[1], 'rank':idx+1} for idx,it in enumerate(sorted([[item['value'],item['word']] for item in my_dict],reverse=True))] 
1

使用Pandas Library:

import pandas as pd 

有這樣一行代碼:

scrabble_rank = pd.DataFrame(my_dict).sort_values('value', ascending=False).reset_index(drop=True).reset_index().to_dict(orient='records') 

它輸出:

[{'index': 0, 'value': 9, 'word': 'aahed'}, 
{'index': 1, 'value': 6, 'word': 'aah'}, 
{'index': 2, 'value': 2, 'word': 'aa'}] 

基本上它排序value降序排列讀你的記錄成數據幀,那麼它的話,那滴原指數(訂單),並將其導出爲記錄(你以前的格式)。

1

您可以使用heapq

import heapq 

my_dict = [{'word': 'aa', 'value': 2}, 
      {'word': 'aah', 'value': 6}, 
      {'word': 'aahed', 'value': 9}] 

# Select the top 3 records based on `value` 
values_sorted = heapq.nlargest(3, # fetch top 3 
           my_dict, # dict to be used 
           key=lambda x: x['value']) # Key definition 
print(values_sorted) 
[{'word': 'aahed', 'value': 9}, {'word': 'aah', 'value': 6}, {'word': 'aa', 'value': 2}]