python字典如何:按值排序,在值相等的情況下再按鍵排序?
01-31
例如{『ab:2, bc:5, dc:3, bc:3}的排序應該是[(bc, 5), (bc, 3), (dc, 3), (ab, 2)], 謝謝!
首先,字典里的鍵不可重複。題主給的例子
{ab:2, bc:5, dc:3, bc:3}
中有兩個bc。python在初始化字典時用後面的把前面的覆蓋掉,從而成為:
{ab: 2, dc: 3, bc: 3}
接著回答題主問題「如何先按值再按鍵排序」:
注意:字典本身是無序的,因為在python中字典是通過hash實現的。不過可以拿出字典中的鍵值到一個列表中進行排序。
於是問題可以轉化為「如何對一個元組的列表按照兩個優先順序不同的key進行排序」。
上代碼:
In [1]: d = {ab:2, bc:5, dc:3, bc:3}
In [2]: sorted(d.items(), key=lambda kv: (-kv[1], kv[0]))
Out[1]: [(bc, 3), (dc, 3), (ab, 2)]
(根據題意感覺題主想說的是值降序排列,鍵升序排列,所以在kv[1]前加了負號。
如果想對更多的key進行排序(不只是兩個),例如對l = [(1, 2, 3, 4), (1, 2, 3, 5), (1, 2, 2, 5)]
這樣的數組,先比最後一個,再比倒數第二個,最後比第一個
只需在lambda表達式處返回相應元組即可:In [1]: l = [(1, 2, 3, 4), (1, 2, 3, 5), (1, 2, 2, 5)]
In [2]: sorted(l, key=lambda x: (x[3], x[2], x[1], x[0]))
Out[1]: [(1, 2, 3, 4), (1, 2, 2, 5), (1, 2, 3, 5)]
#對字典進行排序tupSum = sorted(dicSum.iteritems(), key=lambda val:val[1],reverse=True)
推薦閱讀:
TAG:Python |