2015-12-12 228 views
0

我有一個字典,其中的鍵是字符串,值是整數。我必須返回一個列表,其中首先有小值的鍵。在平局的情況下,按字母順序排列的關鍵字將被退回。如何按值和鍵對字典進行排序?

例如,考慮將名稱映射到權重的字典。

d={'Tony':78,'Steve':88,'Bruce':68,'Thor':78,'Bob':50} 

然後將得到的名單應該是:

['Bob','Bruce','Thor','Tony','Steve'] 

由於雷神談到託尼之前,按字典。

我該如何做到這一點?

+0

['map'(https://docs.python.org/2/library/functions.html#map)'('['lambda'] (https://docs.python.org/2/tutorial/controlflow.html#lambda-expressions)'(k,v):k,'''sorted''](https://docs.python.org/2 /library/functions.html#sorted)'(列表(d.' ['項目()'](https://docs.python.org/2/library/stdtypes.html#mapping-types-dict)') ,key = lambda(k,v):(v,k)))',heh。 –

回答

0

如果你想打破由名字的領帶,在前排序值,那麼關鍵:

from operator import itemgetter 

print(list(map(itemgetter(0), sorted(d.items(), key=itemgetter(1,0))))) 
['Bob', 'Bruce', 'Thor', 'Tony', 'Steve'] 

或常規列表比較:

print([k for k,_ in sorted(d.items(), key=itemgetter(1, 0))]) 
0

相當容易:

result = sorted(d, key=lambda k: (d[k], k)) 

如果dict是巨大的,它可能是值得的直接迭代的項目和使用itemgetter翻轉鍵和值進行排序,然後刪除值避免每個鍵dict查找在結果:

from operator import itemgetter 

results = list(map(itemgetter(0), sorted(d.items(), key=itemgetter(1, 0)))) 
+0

我發佈目標是先按值排序,然後鍵,所以我編輯使用兩個。 – ShadowRanger