Python:对这个词典进行排序(dict中的dict)

时间:2010-12-02 05:11:40

标签: python sorting dictionary

d = { 'a':{'k':1, 'b':'whatever'},  'b':{'k':2, 'b':'sort by k'} }

想要在python中按k降序排序这个字典。

有点棘手,请帮忙。

5 个答案:

答案 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')))