关闭

python中的有序字典

2688人阅读 评论(0) 收藏 举报
分类:

转自: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 plaincopy
  1. insert(index, key, value)  
  2. value_for_index(index)  

注意事项:

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


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

下面的方法是有效的:

[python] view plaincopy
  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 plaincopy
  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 plaincopy
  1. {'b'1'a'2'c'3}  
  2. {'b'1'a'2'f'4'c'3}  
  3. 1  


 




0
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1907481次
    • 积分:20479
    • 等级:
    • 排名:第382名
    • 原创:182篇
    • 转载:899篇
    • 译文:2篇
    • 评论:142条
    最新评论