d = { 'a':{'k':1, 'b':'whatever'}, 'b':{'k':2, 'b':'sort by k'} }
想要在python中按k降序排列此字典。Python:對字典進行排序(字典中的字典)
有點棘手,請幫忙。
d = { 'a':{'k':1, 'b':'whatever'}, 'b':{'k':2, 'b':'sort by k'} }
想要在python中按k降序排列此字典。Python:對字典進行排序(字典中的字典)
有點棘手,請幫忙。
dict
s是無序的。所以沒有辦法對他們直接進行排序,但如果你願意 向dict
轉換成的(鍵,值)元組的列表,那麼你可以這樣做:
In [9]: d
Out[9]: {'a': {'b': 'whatever', 'k': 1}, 'b': {'b': 'sort by k', 'k': 2}}
In [15]: sorted(d.items(),key=lambda x: x[1]['k'],reverse=True)
Out[15]: [('b', {'b': 'sort by k', 'k': 2}), ('a', {'b': 'whatever', 'k': 1})]
這excellent mini-howto解釋瞭如何使用的key
參數。
詞典不是「排序」的。這不是一個有意義的概念。在概念上,鍵和值根本不在任何「順序」中,因此您無法更改它們的順序。
是的,但我們可以把我t轉換爲其他序列類型並對其進行排序並將其再次轉換爲字典。 – user469652 2010-12-02 05:20:25
@ user469652:在哪一點他們將不再被排序。 – 2010-12-02 05:22:25
如果您使用python 2.7或更高版本,請使用OrderedDict。
有序字典就像普通字典一樣,但是他們記得物品被插入的順序。在迭代有序字典時,將按照首次添加密鑰的順序返回項目。
從例如
>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
對於試圖達到同樣的效果爲Python 2.4或更低一些,請參閱:
一掇代替Py2.7的新collections.OrderedDict,它可以在Python 2.4中工作-2.6。
如果你有一本字典(數據)包含的值(V)和優先級(P),如果你想進行排序的子詞典(D1和D2)字典用於遍歷它那麼的意圖,那麼你可以這樣做:
data = { "d1": { "v": "hello", "p": 3}, "d2": {"v": "hi again", "p": 1},}
for item in sorted(data.keys(), key=lambda x: data[x]['p']):
print item
from collections import OrderedDict
from operator import *
d = { 'a':{'k':1, 'b':'whatever'}, 'b':{'k':2, 'b':'sort by k'} }
sorted_d = OrderedDict(sorted(d.items(), key=lambda x: getitem(x[1], 'k')))
你能解釋一下`x [1] ['k']`嗎?我理解['k']部分,但是x [1]是什麼? – user225312 2010-12-02 05:20:06