d = { 'a':{'k':1, 'b':'whatever'}, 'b':{'k':2, 'b':'sort by k'} }
想要在python中按k降序排序这个字典。
有点棘手,请帮忙。
答案 0 :(得分:19)
dict
是无序的。所以没有办法直接对它们进行排序,但如果你是这样的话
愿意将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
参数的使用。
答案 1 :(得分:4)
如果您使用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的新集合的替代品.OrderedDict适用于Python 2.4-2.6。
答案 2 :(得分:1)
字典不是“排序”的。这不是一个有意义的概念。从概念上讲,键和值根本不是任何“顺序”,因此您无法更改它们的顺序。
答案 3 :(得分:0)
如果您的字典(数据)包含子字典(d1和d2),其中包含值(v)和优先级(p),如果您想对字典进行排序以便迭代它,那么您可以这样做:
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
答案 4 :(得分:0)
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')))