2016-11-13 91 views
-1
dict = {'a':5 , 'b':4, 'c':3, 'd':3, 'e':1} 

第二個是'b',有4次。聯合三分爲'c'和'd'三次。隨着字典隨着時間的推移而變化,比如說'f'加上了一個3的值,那麼第三個將會是'c','d'和'f'三次。在詞典中獲得第二和第三最高值

+0

如果您使用了'collections.Counter ''你會得到'most_common'方法...... – jonrsharpe

回答

1

只需創建一個元組值,然後對其進行排序。打印項目

d = {'a':5 , 'b':4, 'c':3, 'd':3, 'e':1} 

x = sorted(((v,k) for k,v in d.items())) 
print(x[-2][1]) 
print(x[-3][1]) 

結果:

b 
d 

(如果字典不具有至少3個項目將失敗)

或者直接用key參數(避免數據重新排序)

x = sorted(d.items(),key=(lambda i: i[1])) 
print(x[-2][0]) 
print(x[-3][0]) 

結果:

b 
d 

順便說一句,避免使用dict作爲變量。

編輯:由於有幾個相同的值,你可能想要得到2秒的最佳值和相關的字母。你必須以不同的方式做。我想創建使用密鑰值,並存儲在一個列表中的默認列表,然後進行排序它在上面的代碼中完成:

import collections 

d = {'a':5 , 'b':4, 'c':3, 'd':3, 'e':1} 

dd = collections.defaultdict(list) 

for k,v in d.items(): 
    dd[v].append(k) 

x = sorted(dd.items()) 

print(x[-2]) 
print(x[-3]) 

結果:

(4, ['b']) 
(3, ['c', 'd']) 
+0

所以x的輸出是[('a',5,'b',4)]或類似的東西。通過使用[-2] [1],你抓住第二個最後的索引,[1]是值? – Roger

+0

我還需要獲取與該值對應的鍵,並且如果多個鍵具有相同的出現次數,它們也必須被打印。 – Roger

+0

我已經添加了一些你想要的東西。技術略有不同。 –

相關問題