有序字典

浏览: 1393

有时候我们想起要对字典进行排序,但在python中dict对象中的键值对是没有顺序的,但是在collections模块中有个子类OrderedDict,它能记住字典的插入顺序。

>>> d = {2:'b',1:'a',3:'c'}
>>> d
{1: 'a', 2: 'b', 3: 'c'}
>>> d[0]='z'
>>> d
{0: 'z', 1: 'a', 2: 'b', 3: 'c'}

标准dict对象添加元素保存在字典中是没有顺序的,从上代码可以看出,但对于OrderedDict就不一样。

>>> od = collections.OrderedDict({2:'b',1:'a',3:'c'})
>>> od
OrderedDict([(1, 'a'), (2, 'b'), (3, 'c')])
>>> od[0]='z'
>>> od
OrderedDict([(1, 'a'), (2, 'b'), (3, 'c'), (0, 'z')])

od的最后一个项就是最后加入的,很好的按照插入的先后顺序保存在其中。

利用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)])

>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])

上面的lambda函数还是也可以用operator.itemgetter函数来代替,如:

>>> # dictionary sorted by key
>>> import operator
>>> OrderedDict(sorted(d.items(), key=operator.itemgetter(0)))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
推荐 0
本文由 刘志军 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册