python中的有序字典

转自:http://zoomq.qiniudn.com/ZQScrapBook/ZqFLOSS/data/20111219235951/

Python中的有序字典(OrderedDict)

很早以前就知道的东西,不过刚才看了一下,好像还是有记一下的必要。

问题是这样的:我们都知道Python的字典(dict)是无序的,如果我们希望这个字典有序怎么办?这个功能其实在Python的2.7和3.1里得到了实现,就是OrderedDict。大家可以参考一下这篇PEP:Adding an ordered dictionary to collections。当然,还有Python的官方文档8.3.6. OrderedDict objects由于Python 2.7已经在发布,所以这个问题倒也不是很大。

不过,我现在仍在使用Python 2.6,估计在一个月之内还不会换2.7,那么怎么办呢?像这位老兄一样,自己实现OrderedDict吗?当然,我们也知道,很早以前就有人给出过解答:Python中dict的有序输出(排序)

但其实,还有一个更懒的办法,因为已经有人实现了有序字典,Python Utils 。这个模块里不光实现了OrderedDict类,也实现了其它一些有用的东西,像standout模块也很有用,不过这个不是本文的重点。我们只需要装一下Python Utils,然后读一下文档就行,不需要再自己考虑实现一个有序字典。

PS: gentoo的用户可以直接安装Python Utils模块,运行如下命令即可:

$ emerge pythonutils


django中也自带了一个有序的字典,转自:http://blog.csdn.net/jianhong1990/article/details/8983583

根据名字来理解sorteddict:排序过的字典。它支持按索引来操作字典。

A dictionary that keeps its keys in the order in which they're inserted.

它提供了两个有用的方法

[python]  view plain copy
  1. insert(index, key, value)  
  2. value_for_index(index)  

注意事项:

[python]  view plain copy
  1. d = SortedDict({  
  2.     'b'1,  
  3.     'a'2,  
  4.     'c'3  
  5. })  


上述方法是无效的,sorteddict不知道插入顺序。

下面的方法是有效的:

[python]  view plain copy
  1. from django.utils.datastructures import SortedDict  
  2. d2 = SortedDict()  
  3. d2['b'] = 1  
  4. d2['a'] = 2  
  5. d2['c'] = 3  

最后一个demo:

[python]  view plain copy
  1. from django.utils.datastructures import SortedDict  
  2. d2 = SortedDict()  
  3. d2['b'] = 1  
  4. d2['a'] = 2  
  5. d2['c'] = 3  
  6. print d2  
  7. d2.insert(2,'f',4)  
  8. print d2  
  9. print d2.value_for_index(0)  


输出:

[python]  view plain copy
  1. {'b'1'a'2'c'3}  
  2. {'b'1'a'2'f'4'c'3}  
  3. 1  


 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值